Guten Abend,
ich will mich so langsam von der Makro-Orientierten Programmierung trennen, dabei ist mir aufgefallen, dass sie trotz ein paar Codezeilen mehr dennoch viel schneller ist. Und daher nutzte ich sie immer noch zu Genüge.
Dazu habe ich mal nachfolgend 2 Varianten geschrieben, wo ihr mir bestimmt sofort mit Sicheheit sagen könnt, wo mein Denkfehler liegt.
Zur Aufgabe:
Ich habe In 20000 Zeilen per Zufall irgendwelche Werte in den ersten beiden Spalten (A,B) eingefügt. In Spalte C will ich die Summe auf alle 20000 Zeilen berechnen lassen. Dabei will ich am Ende nur reine Werte haben (also nicht als Formel). In der 1. Variante habe ich mir den Makrorekorder zur Hilfe genommen den Code anschließend etwas modifiziert. De Facto habe ich mit Formeln und anschließenden Kopier- u. Einfügmethoden gearbeitet.
Variante 1:
iRow = Cells(Rows.Count, 1).End(xlUp).Row
Cells(1, 3).FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
Cells(1, 3).Copy
Range("C1:C" & iRow).Select
ActiveSheet.Paste
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
In der 2. Variante habe ich zwar einen funktionierenden und Codezeilen sparenderen Code ohne Makrorekorder verwendet. Dieser ist bei mir auf dem Rechner aber mindestens 30 mal langsamer als der erste. Was sollte ich eurer Meinung nach besser machen? Gibt es evtl. andere Möglichkeiten?
iRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To iRow
Cells(i, 3).Value = Cells(i, 1).Value + Cells(i, 2).Value
Next i
Vielen Dank für eure Hilfe!
Mit freundlichen Grüßen
Richard E.