VBA mit Datenfelder
08.09.2003 17:50:37
Christoph
Durch das Archiv bin ich darauf gestoßen, dass Berechnungen in VBA mit Arrays in der Regel viel schneller sind als mit der herkömmlichen Methode über Zellwerte.
Bei einer Gegenüberstellung dieser Methoden (siehe z.B. Archiv: https://www.herber.de/forum/archiv/12to16/t12635.htm) wurde behauptet, dass die Berechnung von z.B. 30000 Werten mit Array doppelt so schnell ist. (Laufzeit wird im Makro verarbeitet und anschließend ausgegeben)
Ich habe mir eine Tabelle wie im oben angegebenen Thread nachgebaut, und habe festgestellt, dass die Berechnungszeit der Werte bei der Array-Methode etwas kürzer ist. Es kommt allerdings noch die Zeit hinzu, um die Daten in den Array einzulesen.(ergo ist die Array-Methode sogar langsamer)
Mit Datenfeldern in VBA hab ich so gut wie gar keine Ahnung.
Mein Frage: läßt sich die Beispiel-Aufgabe: "Wert aus Zeile A plus Wert aus Zeile B minus Wert aus Zeile C" unter VBA mit Arrays anders formulieren, so dass die Bearbeitungszeit wirklich verkürzt wird?
hier der Link zu meiner nachgebauten Tabelle:
https://www.herber.de/bbs/user/936.xls
und der Code:
Sub berechnung_mit_Array()
Dim arr1() As Long
Dim ZeilenAnz As Long, m As Long, i As Long
Dim n As Integer
Dim t1 As Double, t2 As Double
ZeilenAnz = 30000
t1 = Now
Application.ScreenUpdating = False
'Einlesen der Daten:
ReDim Preserve arr1(ZeilenAnz, 3)
For m = 3 To ZeilenAnz
For n = 1 To 3
arr1(m, n) = Cells(m, n).Value
Next n
Next m
'Berechnen:
t2 = Now
For i = 3 To ZeilenAnz
Cells(i, 5) = arr1(i, 1) + arr1(i, 2) - arr1(i, 3)
Next i
Application.ScreenUpdating = True
Cells(4, 8) = t2 - t1 'Zeit, um Daten einzulesen
Cells(5, 8) = Now - t2 'Berechnungszeit
Cells(6, 8) = Now - t1 'Gesamtzeit
End Sub
vielen Dank für eure Hilfe
Gruß
Christoph