VBA Geschwindigkeitstest
In diesem Beitrag möchte ich Ihnen einen Überblick über verschiedene Arten von VBA-Schleifen und den daraus resultierenden Durchlaufgeschwindigkeiten geben.
Die Testdatei enthält dazu in Spalte A 2000 Zahlen und die gleiche Menge in Spalte B. Ziel der Testumgebung ist, Duplikate, also gleiche Ziffern von Spalte A in Spalte B zu finden und über den Befehl debug.print im Direktfenster der VBA-Umgebung auszugeben.
Die folgende Abbildung zeigt die ersten Zeilen der Testdatei mit den entsprechenden Ergebnissen.
Der Geschwindigkeitstest untersucht drei verschiedene For-Next-Schleifendurchläufe, welche im Folgenden kurz erläutert werden:
Variante 1: For-Next-Schleife mit direktem Verweis auf die Spalten- und Zeilennummern
Diese Variante verwendet die direkte Referenzierung der Zeilennummern, indem in der For-Next-Schleife die Start- und End-Zeilennummer angegeben wurde, siehe entsprechenden VBA-Code:
Variante 2: For-Each-Next-Schleife mit direktem Verweis auf die Spalten- und Zeilennummern
Die zweite Variante verwendet anstatt der direkten Zeilenreferenzierung zwei Bereichsnamen, welche zuvor definiert wurden. Dem Namen bereich1 wurde der Zellbereich A1:A2000 und dem Namen bereich2 der Zellbezug B1:B2000 zugewiesen. Um die Bereichsnamen zu durchlaufen kommt das Konstrukt der For-Each-Next-Schleife zum Einsatz, siehe folgenden VBA-Code:
In der dritten Variante wurden die Werte aus dem Bereich A1:A2000 und B1:B2000 zunächst in eine 2-dimensionalte Array-Variable eingelesen. Mit Hilfe der For-Next-Schleife wurde dann der Inhalt der 1. Dimension mit dem Inhalt der 2. Dimension der Array-Variable verglichen und auf diese Weise die Duplikate ermittelt, siehe folgenden VBA-Code:
Die folgende Tabelle zeigt die Programmlaufzeiten der drei Varianten:
Wie dieser Test zeigt, empfiehlt sich gerade beim Durchlaufen vieler Zellen der Einsatz von Array-Variablen. Wie vielleicht vermutet bringt der Einsatz von Bereichsnamen in diesem Zusammenhang keinen Geschwindigkeitsvorteil, das Gegenteil ist der Fall. Die Beispieldatei mit den drei verschiednen Test-Durchläufen können Sie über den nachfolgenden Link herunterladen.
Variante 3: For-Next-Schleife unter Verwendung von Array-Variablen
Testergebnisse
Variane
Laufzeit in Sekunden
Variante 1
33 Sekunden
Variante 2
44 Sekunden
Variante 3
< 1 Sekunde
Wie nicht anders zu erwarten war, ist die Variante mit Verwendung der Array-Variablen die schnellst. Dass der Vergleich aber in nur einem kleinen Bruchteil der notwendigen Zeit der anderen Varianten erfolgt, war dann doch etwas überraschend.











