Performance in VBA - Zellbezüge & Datenfelder
23.10.2005 13:38:39
Alex
ich habe eine kleine Frage zur Performance - vielleicht
kann mir jemand helfen.
Mir ist aufgefallen, das Excel mit Datanfeldern wesentlich
schneller rechnet als mit den Werten von Zellbezügen.
Mitunter hundert Mal so schnell.
z.B läuft diese
Sub :
Option Explicit
Sub Perf_gut()
Dim d(1 To 1000) As Double
Dim c As Long
Dim c2 As Long
Dim w As Worksheet
Set w = ActiveSheet
For c = 1 To 1000
d(c) = w.Cells(c, 1)
Next c
For c = 1 To 1000 - 1
For c2 = c + 1 To 1000
d(c2) = d(c2) + d(c)
Next c2
Next c
For c = 1 To 1000
w.Cells(c, 1) = d(c)
Next c
End Sub
erheblich schneller als diese:
Sub Perf_schlecht()
Dim c As Long
Dim c2 As Long
Dim w As Worksheet
Set w = ActiveSheet
Application.ScreenUpdating = False '24,5
Application.EnableEvents = False '18
Application.Interactive = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
For c = 1 To 1000 - 1
For c2 = c + 1 To 1000
w.Cells(c2, 1) = w.Cells(c2, 1) + w.Cells(c, 1)
Next c2
Next c
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Interactive = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
Trotz der Manipulationen des Application Objects.
Problem bei der 1.
Sub ist aber, das sie doch sehr umständlich
zu programmieren ist.
Hat jemand eine Idee, wie man mit den Zellen in einer Excel-Mappe
genauso schnell rechnen kann, wie mit Datenfeldern? Bzw. den Code
der 2.
Sub durch weitere Einschränkungen des Application-Object
weiter beschleunigen kann. Oder gibt es eine Einfache Möglichkeit,
Ranges in Datenfelder zu kopieren und umgekehrt?
Für eine Idee wäre ich sehr dankbar.