VBA Code optimieren
#1
Hallo zusammen,

Ich muss in einer Excel Tabelle mehrere Spalten über eine bestimmte Formel berechnen lassen und habe dazu folgendes einfaches makro erzeugt.

Sub Spalten_einfügen()
Dim letzte As Long

letzte = Cells(Rows.Count, 1).End(xlUp).Row

Range("F39").FormulaR1C1 = "=RC[-4]-RC[-5]*R13C[5]"
Range("G39").FormulaR1C1 = "=RC[-4]-RC[-6]*R13C[5]"
Range("H39").FormulaR1C1 = "=RC[-4]-RC[-7]*R13C[5]"
Range("I39").FormulaR1C1 = "=RC[-4]-RC[-8]*R13C[5]"
Range("F39:I39").Copy Destination:=Range("F39:I" & letzte)

End Sub

Da meine excel-Dateien sehr groß sind (>800.000 Zeilen) würde ich gern wissen, ob evtl. die Möglichkeit besteht den Code so umzuschreiben, dass die Berechnung deutlich schneller erfolgt? 

Beste Grüße
 Sandro
Antworten Top
#2
Hallo Sandro,

der "optimierte" Code vielleicht so:
Sub FormelnRein()
Range("F39:I" & Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = "=RC[-4]-RC[-5]*R13C[5]"
End Sub
Aber schneller wird es deshalb auch nicht rechnen.

Gruß Uwe
Antworten Top
#3
Hi,

evtl. so:


Code:
Sub Spalten_einfügen()
Dim letzte As Long

letzte = Cells(Rows.Count, 1).End(xlUp).Row

Range("F39").FormulaR1C1 = "=RC[-4]-RC[-5]*R13C[5]"
Range("G39").FormulaR1C1 = "=RC[-4]-RC[-6]*R13C[5]"
Range("H39").FormulaR1C1 = "=RC[-4]-RC[-7]*R13C[5]"
Range("I39").FormulaR1C1 = "=RC[-4]-RC[-8]*R13C[5]"
Range("F39:I39").AutoFill Range("F39:I" & letzte)

End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
Moin!
Ich habe für den gesamten Bereich (anders als Uwe) diese Formel:
=RC[-4]-RC1*R13C[5]
oder auch "auf gut Deutsch"
=B39-$A39*K$13

800k Zeilen * 4 simple Grundrechenformeln dürften imho kein Performanceproblem darstellen.

Range("F39:I800039").FormulaR1C1 = "=RC[-4]-RC1*R13C[5]"
Braucht tatsächlich erstaunliche 30 Sekunden …

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
(18.08.2018, 19:40)RPP63 schrieb: Ich habe für den gesamten Bereich (anders als Uwe) diese Formel:
=RC[-4]-RC1*R13C[5]

Muss mal doof nachfragen , wo ist denn da genau der Unterschied zu Uwes Formel?  Huh

Viele Grüße Sandro
Antworten Top
#6
Es gibt keine doofen Fragen.
Uwe:
=RC[-4]-RC[-5]*R13C[5]
Formel in F39:
=B39-A39*K$13
Ich:
=RC[-4]-RC1*R13C[5]
Formel in F39:
=B39-$A39*K$13
Der Unterschied "beim Ziehen" sollte klar sein?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
(19.08.2018, 16:03)RPP63 schrieb: Formel in F39:
=B39-$A39*K$13
Der Unterschied "beim Ziehen" sollte klar sein?

Gruß Ralf

Ah jetzt hab ichs :D 
Das Dollarzeichen bedeutet ja aber, dass der Wert aus A39 für jede Zeile verwendet wird. Der muss bei meiner Auswertung jedoch immer dem aktuellen Wert für die Zeile A entsprechen bleiben.

Gruß Sandro
Antworten Top
#8
(19.08.2018, 16:31)Sandrof90 schrieb: Ah jetzt hab ichs :D 

Ich glaube nicht!  :19:
Zitat:Das Dollarzeichen bedeutet ja aber, dass der Wert aus A39 für jede Zeile verwendet wird. Der muss bei meiner Auswertung jedoch immer dem aktuellen Wert für die Zeile A entsprechen bleiben.


Wie viele $ siehst Du?
Ich sehe nur eins, und zwar vor der Spaltenbezeichnung!
Heißt:
Beim kopieren nach rechts bleibt $A39 immer gleich.
Beim ziehen nach unten wird aus $A39 $A40 usw.

Grundlagenwissen:
https://www.online-excel.de/excel/singsel.php?f=56

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(19.08.2018, 16:57)RPP63 schrieb: Beim kopieren nach rechts bleibt $A39 immer gleich.
Beim ziehen nach unten wird aus $A39 $A40 usw.
Ach Stimmt ja :D

Besten Dank!  :23:
Antworten Top


Gehe zu:


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