Tipps & Tricks: For...Next-Schleifen

Abzählen mit For...Next-Schleifen

Wenn wir bereits vor dem Programmstart wissen, wie oft eine Schleife ausgeführt werden soll, verwendet man am besten einer For...Next-Schleife. Durch die Eingabe von Start- und End-Werten, bei denen es sich um ganze Zahlen, Variablen oder gar komplexen Ausdrücken handeln kann, legt man fest, wie oft VBA die Schleife durchlaufen soll. Währen die Schleife läuft, registriert eine Zähler-Variable die Anzahl vollendeten Durchläufe. Sobald der Wert des Zählers mit dem End-Wert übereinstimmt, endet die Schleife.

Vereinfacht sieht die Syntax einer For...Next-Struktur so aus:

For Zähler = Startwert to Endwert
  '(bei jedem Durchlauf der Schleife
  ' auszuführende Anweisung)
Next Zähler

oder als Beispiel, bei dem auch etwas „passiert“:

Dim i as Integer
For i = 1 to 10
  'Ausgabe des aktuellen Wertes
  'im Direktfenster
  Debug.Print "Das ist Durchlauf " & Str(i)
Next i

In diesem Beispiel sind die Werte für Start und Ende jeweils Zahlen. Wenn die Schleife beginnt, wird die Variable i auf 1 gesetzt – mit anderen Worten: Der Wert von Start wird der Zählervariablen zugeordnet. Nach jedem kompletten Durchlauf erhöht Next i den Wert von i um 1, und die Schleife beginnt von vorne. Wenn der Wert von i 10 erreicht, endet die Schleife.

Verschachtelte For...Next Schleifen

Wie andere VBA-Strukturen auch, können For...Next-Schleifen ineinander – oder in andere Kontrollstrukturen – verschachtelt werden, und zwar so oft man will. Der folgende Codeblock verdeutlicht das Prinzip (verbunden mit der Frage, was passiert da eigentlich?):

Beispiel:

' Na, für was könnte man dies einsetzen?
Sub GoodLuck()
 
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim s As String
    Dim t As String
 
    For i = 1 To 6
        For j = 1 To 6
            Do
                k = Int((49 * Rnd) + 1)
            Loop Until InStr(s, Str(k)) = 0
            If Len(s) > 0 Then
                s = s & vbTab
            End If
            s = s & Str(k)
        Next j
        t = t & s & vbCrLf
        s = ""
    Next i
    MsgBox t
 
End Sub