Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Variierende Spalten auf Konstante Zellen zurückgreifen VBA
#1
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
Antworten Top
#2
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
Antworten Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Lutz Fricke für diesen Beitrag:
  • nionox
Antworten Top
#4
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
Antworten Top
#5
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
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • nionox
Antworten Top
#6
Hallo Werner,

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

Gruss nionox
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste