Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

FormulaR1C1 passt Zellbezüge nicht richtig an





Frage

Hallo! (Also, gleich nochmal, hier leider ohne Hervorhebungen. Mit [fett] und [code] in .../threads/1337635.)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 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($C2: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! (in .../threads/1337635 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 1 von rainberg

Hallo Caro,

probier´s mal so:

Sub test_SN1337635()
Range(Cells(1, 6), Cells(Range("C65536").End(xlUp).Row, 6)).FormulaR1C1 = _
"=IF(COUNTIF(R1C[-3]:RC[-3],RC[-3])=1,""einfach"",""mehrfach"")"
End Sub

Antwort 2 von rainberg

....und natürlich grüsst Dich Rainer

Antwort 3 von CaroS

Hallo Reiner,

also erstmal einen richtig großen Dank! Das hat mich nämlich schon einen halben Tag gekostet und bis dahin verfolgt, wo das Papier aufgerollt ist. Des Rätsels Lösung liegt also in einer mysteriösen Buchstaben-Zahlen-Kombination R1C[-3]:RC[-3],RC[-3]. Ich wüsste ja gerne genau, was die einzelnen Zeichen bedeuten, aber das ist nicht so einfach rauszukriegen.

Kann man das mal irgendwo nachlesen, ich hab da echt ´ne ganze Weile danach gesucht und absolut nichts gefunden. Das Elend fängt schon in der Excel-VBA-Hilfe an. Wie und womit hast Du denn das gelernt?

Da Du die Antwort für 4. ziemlich schnell rausgekriegt hast und wahrscheinlich noch viel mehr weißt, kannst Du Dich ja auch noch mal an die Frage 2 machen. Ich finde, sowas sollte aufgeklärt werden.

Als erstes und einfachstes würde mich natürlich interessieren, ob jemand meine Ergebnisse bestätigen kann oder andere Ergebnisse kriegt. Das Makro stammt ja von anderen Usern, die damit arbeiten, also kann es sein, dass es dort - mit dem Code wie angegeben - besser funktioniert oder aber dass der Code nur fehlerhaft übermittelt wurde.

Grüße (nach Pankow?),
CaroS

Antwort 4 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 5 von rainberg

Hallo Caro,

da hat sich ja Deine Nachtschicht gelohnt, hast alles richtig verstanden.

Um nun das echte Rätsel noch zu lösen, schreibe Dir einfach mal paar einfache Testformeln mit absoluten, relativen und gemischten Bezügen in verschiedene Zellen und schalte danach auf die S1Z1-Bezugsart um.

Damit werden ja auch die Formeln an die neue Bezugsart angepasst und Du wirst damit das Rätsel lösen.

Mit Worten könnte ich es nicht besser erklären.


Gruß
Rainer