Clever-Excel-Forum

Normale Version: Variierende Spalten auf Konstante Zellen zurückgreifen VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen allerseits,

ich habe folgendes Problem: per VBA habe ich es geschafft, eine Vielzahl von Zellen einer Spalte mit Formeln zu bestücken (Einfach Division zweier Zellen). Allerdings habe ich nun weitergebaut und möchte, dass nach der letzten Zeile wieder oben begonnen werden soll und das ganze 6 Spalten weiter. Anbei mein Code. Das einzige Problem was ich jetzt habe ist, dass mit jedem Spaltensprung auch die Formeln auf Zellen mit dem gleichen Abstandverhältnis zugreifen. Allerdings möchte ich, dass der eine Wert immer fix aus Spalte F genommen wird für die Berechnung. Sprich RC[-1] ist genau richtig, allerdings soll RC[-8] konstant bleiben und sich nicht mit dem Spaltensprung verschieben. Ich habe schon versucht, -8 durch einen Zellbezug mit .Cells festzulegen, allerdings Fehlermeldung. Kann mir hier jemand behilflich sein? Besten Dank :)

Code:
'PAL% für die Tourenabschnitte

y = 19
For y = y To 194
For z = 2 To Berechnunglastrow
    Cells(z, y).FormulaR1C1 = "=RC[-1]/RC[-8]"
Next z
y = y + 6
Next y
Hallo,

wie bitte kommst du auf Spalte F ??

Die erste Spalte in der du die Formel einträgst ist Spalte 19, somit also Spalte S

RC[ -1] ist eine Spalte davor, also Spalte R
RC[ -8] ist acht Spalten davor, also Spalte K

Deine Formel sieht somit so aus: =R2/K2

Zudem stellt sich die Frage, weshalb du die Formel zeilenweise in die Spalten einträgst und nicht in einem Rutsch in den kompletten Zellbereich der entsprechenden Spalte?

Gruß Werner
Hallo nionox,

mach 
Code:
Cells(z, y).FormulaR1C1 = "=RC[-1]/RC11"
draus, dann beziehst Du dich immer auf die 11. Spalte (Spalte "K").

Gruß,Lutz
Hallo Werner,

du hast Recht, das war ein Flüchtigkeitsfehler. Ich habe aus Spalten F und H Daten in Zeile K aufsummiert. Ich meine für die folgende Formel natürlich Spalte K :)

Ich habe vor drei Tagen das erste Mal mit VBA begonnen zu programmieren und kenne mich noch nicht wirklich aus :D  Und dies ist bisher der einzige Weg, den ich verstehe.

Gruss nionox

Hallo Lutz,

perfekt, besten Dank! :)

Gruss nionox
Hallo,

das "perfekt" würde ich mal in Zweifel stellen. Du trägst deine Formeln weiterhin zeilenweise ein und nicht gleich komplett in den ganzen Bereich der Spalten.
Code:
For y = 19 To 194 Step 6
    Range(Cells(2, y), Cells(Berechnunglastrow, y)).FormulaR1C1 = "=RC[-1]/RC11"
Next y

Gruß Werner
Hallo Werner,

das ist natürlich eine Spur effizienter, danke dir.

Gruss nionox
Hallo,

eine Spur effizienter ist wohl deutlich untertrieben.

Gib mal als Berechnungslastrow = 1000 vor

Jetzt lass das Makro "zeilenweise" laufen und dann das Makro "blockweise"

Du solltest dir vor Augen halten, dass Excel in etwa gleich viel Zeit braucht einen Wert (oder Formel) in eine einzelne Zelle zu schreiben wie den Wert (oder die Formel) in 1000 Zeilen auf einmal zu schreiben.

Deshalb: Alles was in einem "Rutsch" erledigt werden kann, auch in einem "Rutsch" erledigen.

Gruß Werner
Hallo Werner,

das stimmt sehr wohl, ich habe den Geschwindigkeitsunterschied deutlich gespürt. Berechnunglastrow ist momentan bei 3000 Zeilen und wird schlussendlich wohl bei 15000 liegen. Das sind enorme Unterschiede.

Einens schönen Abend

nionox