Supportnet / Forum / Tabellenkalkulation
Formel bis letzte zeile einfügen?
Frage
Hallo, ich habe folgendes Makro und irgendwie läuft es nicht.
Woran könnte es liegen?
Sub test()
Dim zeile As Integer
zeile = Range("A65536").End(xlUp).row
For i = 2 To zeile Step 1
ActiveCell.FormulaF1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
Next i
End Sub
ich will in der Spalte F eine Formel bis in die letzte befüllte Zeile in Abhängigkeit von A berechnen.
Danke
Antwort 1 von JoeKe
Hallo Fragenkatalog,
versuch es mal so:
Option Explicit
Sub test()
Dim zeile As Integer
For zeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Application.WorksheetFunction.CountIf(Range(Cells(2, 3), _
Cells(zeile, 3)), Cells(zeile, 3)) = 1 Then
Cells(zeile, 6) = 1
End If
Next
End Sub
Gruß
versuch es mal so:
Option Explicit
Sub test()
Dim zeile As Integer
For zeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Application.WorksheetFunction.CountIf(Range(Cells(2, 3), _
Cells(zeile, 3)), Cells(zeile, 3)) = 1 Then
Cells(zeile, 6) = 1
End If
Next
End Sub
Gruß
Antwort 2 von Fragenkatalog
Vielen Dank.. Scheint zu funktionieren!
Antwort 3 von fürLau
Hallo
So gings auch:
Fehler unterstrichen
Gruß
So gings auch:
Sub test()
Dim zeile As Long, i As Long
zeile = Range("A65536").End(xlUp).Row
For i = 2 To zeile Step 1
Cells(i, 6).FormulaR1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
Next i
End Sub
Fehler unterstrichen
Gruß
Antwort 4 von nighty
hi all :)
ich glaub es bedarf keiner schleife :))
gruss nighty
Sub test()
Range(Cells(1, 6), Cells(Range("A65536").End(xlUp).Row, 6)).FormulaR1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
End Sub
ich glaub es bedarf keiner schleife :))
gruss nighty
Sub test()
Range(Cells(1, 6), Cells(Range("A65536").End(xlUp).Row, 6)).FormulaR1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
End Sub
Antwort 5 von CaroS
Hallo nighty,
große Klasse (!) - wieder was gelernt,
aber eine kleine Änderung würde ich vorschlagen. Das Makro fügt die zurzeit Formel
=WENN(ZÄHLENWENN($C1:C$2; C1) = 1; 1; )
in die Spalte F ein und orientiert sich dabei an der Größe des nichtleeren Bereichs in Spalte A: Cells(Range("A65536").End(xlUp).Row
Da sich die eingefügte ZÄHLENWENN-Formel aber auf Spalte C bezieht, wäre es wahrscheinlich besser, den "Arbeitsbereich" des Makros auch darauf zu beziehen:
Sub test()
Range(Cells(1, 6), Cells(Range("C65536").End(xlUp).Row, 6)).FormulaR1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
End Sub
(Ansonsten habe ich leise Zweifel, ob die WENN-ZÄHLENWENN-Formel genau das macht, was sie machen soll, aber die behalte ich natürlich für mich. ;-)
Zumindest die teilabsoluten Zellbezüge $C1 und C$2 sieht etwas komisch aus.
Ich selber verwende ja manchmal eine Formel in der Art
=WENN(ZÄHLENWENN(C$1:C1; C1) = 1; 1; ""),
aber das ist Sache des Anwenders.)
Gruß an alle,
CaroS
große Klasse (!) - wieder was gelernt,
aber eine kleine Änderung würde ich vorschlagen. Das Makro fügt die zurzeit Formel
=WENN(ZÄHLENWENN($C1:C$2; C1) = 1; 1; )
in die Spalte F ein und orientiert sich dabei an der Größe des nichtleeren Bereichs in Spalte A: Cells(Range("A65536").End(xlUp).Row
Da sich die eingefügte ZÄHLENWENN-Formel aber auf Spalte C bezieht, wäre es wahrscheinlich besser, den "Arbeitsbereich" des Makros auch darauf zu beziehen:
Sub test()
Range(Cells(1, 6), Cells(Range("C65536").End(xlUp).Row, 6)).FormulaR1C1 = "=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
End Sub
(Ansonsten habe ich leise Zweifel, ob die WENN-ZÄHLENWENN-Formel genau das macht, was sie machen soll, aber die behalte ich natürlich für mich. ;-)
Zumindest die teilabsoluten Zellbezüge $C1 und C$2 sieht etwas komisch aus.
Ich selber verwende ja manchmal eine Formel in der Art
=WENN(ZÄHLENWENN(C$1:C1; C1) = 1; 1; ""),
aber das ist Sache des Anwenders.)
Gruß an alle,
CaroS
Antwort 6 von CaroS
Hallo!
Ich habe hier ein kleines Makro, das in Spalte F des aktuellen Tabellenblatts eine Formel schreibt, die sich auf Spalte C bezieht. Wenn also in C1:C234 Werte stehen, werden in F1:F234 Formeln eingefügt. (Das Makro schreibt immer ab lückenlos ab F1, auch wenn in C1 und zwischendurch keine Werte stehen, aber darum geht es nicht.)
Das Ergebnis sieht bei mir so aus und das wundert mich sehr:
Zelle: =Formel
F1: =WENN(ZÄHLENWENN($C1:C
F2: =WENN(ZÄHLENWENN($C
F3: =WENN(ZÄHLENWENN($C
F4: =WENN(ZÄHLENWENN($C
F5: =WENN(ZÄHLENWENN($C
F6: =WENN(ZÄHLENWENN($C
und immer so weiter wie in F3 bis F6.
1.) Wer macht hier was falsch, ich, das Makro oder Excel? Oder wer?
2.) Warum macht das Makro das, was es macht? - Aus meiner Sicht 3 Fehler! (fett)
Warum ändert es einmal von Zeile 1 zu Zeile 2 und dann nochmal von Zeile 2 zu Zeile 3 die Zellbezüge? Warum ist die Formel in F1 falsch angepasst (..:C$
3.) Was muss man tun, damit das Makro überall die gleiche (angepasste!) Formel nachdem Schema F3 bis F6 einträgt?
4.) Was muss man tun, damit das Makro überall die angepasste Formel =WENN(ZÄHLENWENN(C$1:C1; C1) = 1; "einfach"; "mehrfach"), einträgt? (Bitte Zellbezüge genau so: C$1:C1; C1 und "Texte".)
Ich hoffe, dass da jemand was weiß. Es eilt nicht.
Gruß,
CaroS
Ich habe hier ein kleines Makro, das in Spalte F des aktuellen Tabellenblatts eine Formel schreibt, die sich auf Spalte C bezieht. Wenn also in C1:C234 Werte stehen, werden in F1:F234 Formeln eingefügt. (Das Makro schreibt immer ab lückenlos ab F1, auch wenn in C1 und zwischendurch keine Werte stehen, aber darum geht es nicht.)
Sub test_SN1337635()
Range(Cells(1, 6), Cells(Range("C65536").End(xlUp).Row, 6)).FormulaR1C1 = _
"=IF(COUNTIF(R2C3:RC[-3],RC[-3])=1,1,)"
End SubDas Ergebnis sieht bei mir so aus und das wundert mich sehr:
Zelle: =Formel
F1: =WENN(ZÄHLENWENN($C1:C
$2;C1)=1;1;)F2: =WENN(ZÄHLENWENN($C
2:C$2;C2)=1;1;)F3: =WENN(ZÄHLENWENN($C
$2:C3;C3)=1;1;)F4: =WENN(ZÄHLENWENN($C
$2:C4;C4)=1;1;)F5: =WENN(ZÄHLENWENN($C
$2:C5;C5)=1;1;)F6: =WENN(ZÄHLENWENN($C
$2:C6;C6)=1;1;)und immer so weiter wie in F3 bis F6.
1.) Wer macht hier was falsch, ich, das Makro oder Excel? Oder wer?
2.) Warum macht das Makro das, was es macht? - Aus meiner Sicht 3 Fehler! (fett)
Warum ändert es einmal von Zeile 1 zu Zeile 2 und dann nochmal von Zeile 2 zu Zeile 3 die Zellbezüge? Warum ist die Formel in F1 falsch angepasst (..:C$
2)?3.) Was muss man tun, damit das Makro überall die gleiche (angepasste!) Formel nachdem Schema F3 bis F6 einträgt?
4.) Was muss man tun, damit das Makro überall die angepasste Formel =WENN(ZÄHLENWENN(C$1:C1; C1) = 1; "einfach"; "mehrfach"), einträgt? (Bitte Zellbezüge genau so: C$1:C1; C1 und "Texte".)
Ich hoffe, dass da jemand was weiß. Es eilt nicht.
Gruß,
CaroS
Antwort 7 von CaroS
Halt! Stop!
Das sollte gar nicht hier hinein. Da braucht keiner drauf antworten. Ich mache einen neuen Thread auf.
Gruß,
Caro
Das sollte gar nicht hier hinein. Da braucht keiner drauf antworten. Ich mache einen neuen Thread auf.
Gruß,
Caro
Antwort 8 von CaroS
Hallo Reiner,
ich glaube, ich habe was entschlüsselt.
ZÄHLENWENN ( C . $1 .. :C 1 .... ; C 1 ...... ) = 1
COUNTIF . . . . . ( R1 C[-3]:R C[-3], R C[-3] ) = 1
R steht für Row = Zeile, C für Column = Spalte, das war ja klar.
Der absolute Bezug $1 ergibt sich in R1 aus der 1 ohne Klammern, während relative Bezüge durch [ ]-Klammern entstehen. -3 gibt an, dass ausgehend vom "Standort" der Formel die 3. Spalte links, also C, verwendet werden soll. In den [ ]-Klammern steht also immer der Offset ausgehend vom "Standort" der Formel und C[+2] würde Spalte H ergeben, wenn man von F ausgeht.
Das einzige echte Rätsel ist jetzt noch die 1 in R1. Die 1 bewirkt im Gegensatz zu der obigen Logik keinen Row-Offset um +1. Keinen Offset müsste man eigentlich mit R0 erreichen, aber die 0 bekommt dem Makro gar nicht. Sieht so aus, also ob für absolute Bezüge eine ganz andere Regel gilt, dass die Zahl genau die Zeilennummer der Zeile angibt, die verwendet werden soll. Na schön, es sieht so aus, als ob man dahinterkommen kann. Das lasse ich mir aber bis übermorgen. Da gibt es ja dann auch noch das R ohne Zahl.
Aber danke nochmal für den richtigen Code, der funktioniert und hat mir auf die Sprünge geholfen.
CaroS
ich glaube, ich habe was entschlüsselt.
ZÄHLENWENN ( C . $1 .. :C 1 .... ; C 1 ...... ) = 1
COUNTIF . . . . . ( R1 C[-3]:R C[-3], R C[-3] ) = 1
R steht für Row = Zeile, C für Column = Spalte, das war ja klar.
Der absolute Bezug $1 ergibt sich in R1 aus der 1 ohne Klammern, während relative Bezüge durch [ ]-Klammern entstehen. -3 gibt an, dass ausgehend vom "Standort" der Formel die 3. Spalte links, also C, verwendet werden soll. In den [ ]-Klammern steht also immer der Offset ausgehend vom "Standort" der Formel und C[+2] würde Spalte H ergeben, wenn man von F ausgeht.
Das einzige echte Rätsel ist jetzt noch die 1 in R1. Die 1 bewirkt im Gegensatz zu der obigen Logik keinen Row-Offset um +1. Keinen Offset müsste man eigentlich mit R0 erreichen, aber die 0 bekommt dem Makro gar nicht. Sieht so aus, also ob für absolute Bezüge eine ganz andere Regel gilt, dass die Zahl genau die Zeilennummer der Zeile angibt, die verwendet werden soll. Na schön, es sieht so aus, als ob man dahinterkommen kann. Das lasse ich mir aber bis übermorgen. Da gibt es ja dann auch noch das R ohne Zahl.
Aber danke nochmal für den richtigen Code, der funktioniert und hat mir auf die Sprünge geholfen.
CaroS
Antwort 9 von CaroS
Sorry, schon wieder im falschen Thread. Ich glaube, muss mal ´ne Pause machen. CaroS

