Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Wenn wir in VBA einen Vorgang mehr als einmal durchführen wollen, verwenden wir dazu eine sogenannte Schleife. Davon gibt es verschiedene Arten: Einige, wie die “For…Next”-Schleife und die “For Each”-Schleife, werden entsprechend einer vorgegebenen Anzahl durchlaufen, andere solange, wie eine bestimmte Bedingung erfüllt ist – so zum Beispiel die “Do While”-Schleife. Dieser Artikel stellt die verschiedenen Schleifenarten vor und zeigt, welche sich für welchen Einsatzzweck eignet.
Schleifen
Grundsätzlich sind Schleifen Code-Konstrukte und ähneln vom Aufbau her den VBA-Routinen. Sie besitzen einen Schleifenkopf und eine abschließende Anweisung, die allerdings in diesem Fall nur das Ende eines Durchlaufs der Anweisungen innerhalb der Schleife bedeutet. Innerhalb der Schleife werden Anweisungen ausgeführt, solange die Bedingungen für das Fortsetzen der Schleife erfüllt sind. Diese Bedingungen können auf verschiedene Arten aufgebaut sein.
Unter VBA kennen wir die folgenden Schleifentypen:
- For…Next-Schleife: Diese Schleife hat eine Laufvariable mit einem Zahlendatentyp sowie einen Start- und einen Endwert. Mit einer zusätzlichen Option können wir festlegen, dass nicht jeder, sondern nur jeder x-te Wert berücksichtigt wird oder auch dass die Werte in umgekehrter Reihenfolge durchlaufen werden.
- For Each-Schleife: Die For Each-Schleife durchläuft alle Elemente einer Auflistung. Dabei wird der Laufvariablen dieses Schleifentyps jeweils das aktuelle Element der Auflistung zugewiesen.
- Do While-Schleife: Diese Schleife wird solange durchlaufen, wie die angegebene Bedingung erfüllt ist. Dementsprechend haben die in der Schleife enthaltenen Anweisungen in der Regel Einfluss auf den als Bedingung angegebenen Ausdruck. Diese Schleife gibt es in zwei Ausführungen – mit der Abbruchbedingung in der ersten und in der letzten Zeile.
- Do Until-Schleife: Im Gegensatz zur Do While-Schleife, die solange durchlaufen wird, wie die Bedingung erfüllt ist, läuft die Do Until-Schleife solange, bis die Bedingung erfüllt ist. Auch die Do Until-Schleife gibt es in zwei Ausführungen, von denen die eine die Bedingung in der ersten Zeile prüft und die andere in der letzten Zeile.
Beispiele
Die ersten Beispiele zu diesem Artikel findest Du in in der Excel-Datei VBABasics_Schleifen.xlsm oder in der Access-Datenbank VBABasics_Schleifen.accdb.
For…Next-Schleife
Die For…Next-Schleife zeichnet sich dadurch aus, dass zu Beginn festgelegt wird, wie oft die enthaltenen Anweisungen durchlaufen werden.
Um nachzuhalten, wie oft die Anweisungen innerhalb der Schleife bereits durchlaufen wurden, wird eine sogenannte Laufvariable verwendet, die meistens i genannt wird. Für diese Variable legt man einen Zahlendatentyp wie Integer oder Long fest. Wenn Du den Typ Integer wählst, musst Du den recht kleinen Wertebereich von -32.768 bis 32.767 beachten.
Die erste Zeile der For…Next-Schleife enthält außerdem noch den ersten und den letzten Wert sowie gegegebenfalls eine Schrittweite. Die Standardschrittweite lautet 1. Man gibt nur in Ausnahmefällen eine alternative Schrittweite an – dazu später mehr.
Die letzte Zeile einer For…Next-Schleife enthält lediglich das Next-Schlüsselwort und optional den Namen der Laufvariablen. Insgesamt sieht eine For…Next-Schleife, die beispielsweise mit den Werten von 1 bis 10 für die Variable i durchlaufen werden soll, wie folgt aus:
Dim i As Integer For i = 1 To 10 Debug.Print i Next i
Innerhalb der For…Next-Schleife wird der Wert von i im Direktfenster ausgeben. Dort erscheinen beim Aufrufen der Prozedur ForNext_Einfach des Moduls mdlBeispieleSchleifen der Beispieldatenbank also die Zahlen von 1 bis 10. Der Ablauf der For…Next-Schleife wird auch vom Flussdiagramm in Bild 1 skizziert. Die Schleife startet mit dem Wert 1 für die Variable i.
Bild 1: Diagramm für den Ablauf einer einfachen For…Next-Schleife
Enthält i einen Wert kleiner oder gleich dem Endwert der Schleife, werden die Anweisungen des Schleifenkörpers ausgeführt und i um eins erhöht.
Monate ausgeben
Die Laufvariable können wir gleich sinnvoll nutzen. Das folgende Beispiel durchläuft etwa die Zahlen von 1 bis 12 und gibt die entsprechenden Monatsnamen aus:
Dim i As Integer For i = 1 To 12 Debug.Print Format("1." & i & "." & Year(Date), _ "mmmm") Next i
Schrittweite mit Step einstellen
Der For…-Zeile können wir noch das Schlüsselwort Step mit der gewünschten Schrittweite hinzufügen.