Home > Artikel > Ausgabe 4/2011 > Schleifen in VBA

Schleifen in VBA

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wenn Sie in VBA einen Vorgang mehr als einmal durchführen möchten, verwenden Sie dazu eine sogenannte Schleife. Davon gibt es verschiedene Arten: Eine wird entsprechend einer vorgegebenen Anzahl durchlaufen, andere bis zum Eintreten einer bestimmten Bedingung. Dieser Artikel stellt die verschiedenen Schleifenarten vor.

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.

Beispiele

Die Beispiele dieses Artikels finden Sie im Modul mdlSchleifen der Beispieldatenbank Access_Basics_2011_04.mdb.

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.

Die erste Zeile der For…Next-Schleife enthält außerdem noch den ersten und den letzten Wert sowie gegebenfalls 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 Laufvariable (dies dient ausschließlich der Übersicht). 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_I des Moduls mdlSchleifen 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.

Flussdiagramm für eine For…Next-Schleife

Bild 1: Flussdiagramm für eine 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 Sie gleich sinnvoll nutzen. Das folgende Beispiel durchläuft etwa die Zahlen von 1 bis 12 und gibt die entsprechenden Monatsnamen aus:

For i = 1 To 12

     Debug.Print Format("1." & i & "." & Year(Date), ?

                                              "mmmm")

Next i

Schrittweite mit Step einstellen

Der For…-Zeile können Sie noch das Schlüsselwort Step mit der gewünschten Schrittweiter hinzufügen. Wenn Sie die Zahlen von 10 bis 1 rückwärts durchlaufen möchten, geben Sie als Startwert 10, als Endwert 1 und für Step den Wert -1 an:

For i = 10 To 1 Step -1

     Debug.Print i

Next i

Exit For

Gelegentlich werden Sie eine For…Next-Schleife vorzeitig verlassen wollen. In diesem Fall können Sie die Exit For-Anweisung verwenden:

For i = 1 To 10

     Debug.Print i

     If i = 5 Then

         Exit For

     End If

Next i

Verschachtelte Schleifen

Möglicherweise möchten Sie einmal zwei oder mehr verschachtelte Schleifen verwenden. Dazu benötigen Sie entsprechend viele Laufvariablen, im folgenden Beispiel i und j:

Dim i As Integer

Dim j As Integer

For i = 1 To 5

     For j = 1 To 5

         Debug.Print "(" & j & "," & i & ")",

     Next j

     Debug.Print

Next i

Die obigen Schleifen geben eine Zahlenmatrix wie in Bild 2 aus. Damit jeweils fünf Einträge nebeneinander ausgegeben werden, beenden Sie die Debug.Print-Anweisung der inneren Schleife mit dem Komma-Zeichen.

Ausgabe zweier verschachtelter For…Next-Schleifen

Bild 2: Ausgabe zweier verschachtelter For…Next-Schleifen

Dies bedeutet, dass die folgende Debug.Print-Anweisung in die gleiche Zeile drucken soll – und zwar mit einem Tabulator-Schritt als Abstand. Sie können auch das Semikolon als letztes Zeichen angeben. Die Ausgabe wird dann unmittelbar hinter dem letzten Zeichen fortgesetzt.

Damit die Ausgabe nach fünf Elementen in der folgenden Zeile fortgesetzt wird, ruft die Prozedur nach der Abarbeitung der inneren Schleife eine Debug.Print-Anweisung ohne auszugebenden Text auf. Dies bewirkt lediglich den Sprung in die nächste Zeile.

Alternative Laufvariablen

Eine Laufvariable muss nicht zwingend eine Ganzzahl des Typs Integer oder Long sein. Sie können auch mit Dezimalzahlen arbeiten und mit dem Step-Schlüsselwort etwa Schritte von 0,1 verarbeiten:

Dim s As Single

For s = 0 To 1 Step 0.1

     Debug.Print s

Next s

Das Beispiel hat allerdings noch einen kleinen Schönheitsfehler, denn die Ausgabe im Direktfenster sieht so aus:

  0

  0,1

  0,2

  0,3

  0,4

  0,5

  0,6

  0,7

  0,8000001

0,9000001

Hier fällt erstens auf, dass nach 0,7 ein Rundungsfehler auftritt. Außerdem fehlt der eigentlich erwartete Wert 1. Dieses Problem ist typisch für Gleitkommazahlen. Im vorliegenden Fall sollten Sie also besser einen Festkomma-Datentyp wie Currency verwenden:

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!