Clever-Excel-Forum

Normale Version: VBA Code optimieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
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
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
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
(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
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
(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
(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
(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: