Supportnet Computer
Planet of Tech

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ß

Antwort 2 von Fragenkatalog

Vielen Dank.. Scheint zu funktionieren!

Antwort 3 von fürLau

Hallo
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

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

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.)

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 Sub


Das 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

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

Antwort 9 von CaroS

Sorry, schon wieder im falschen Thread. Ich glaube, muss mal ´ne Pause machen. CaroS