Registriert seit: 02.08.2018
Version(en): 2010
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 13.04.2014
Version(en): 365, 2019
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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
18.08.2018, 20:40
(Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2018, 20:40 von RPP63.)
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)
Registriert seit: 02.08.2018
Version(en): 2010
(18.08.2018, 20: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?
Viele Grüße Sandro
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 02.08.2018
Version(en): 2010
(19.08.2018, 17: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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
(19.08.2018, 17: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=56Gruß 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)
Registriert seit: 02.08.2018
Version(en): 2010
(19.08.2018, 17: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: