TOP

VBA-Lektion 8.1. Schleifen (Loops)

Schleifen wiederholen Anweisungen mehrmals und können viel Zeit sparen.

Die folgenden Arten von Schleifen existieren in Excel VBA:

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • Der folgende Code fügt eine Zahlenfolge in jede Zelle der Spalte A ein (von 1 bis 12):

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    Dieser Code ist sehr repetitiv ...

    Stellen Sie sich vor, wir müssten statt nur 12 aufeinanderfolgende Zahlen in Hunderte von Zellen einfügen ... Jetzt verstehen Sie, warum Schleifen sehr nützlich sind.

    WHILE ... WEND

    Geben wir ein Beispiel für einen leeren Zyklus While:

    Sub while_loop()
    
        While [Zustand]
            'Anweisungen
        Wend
    
    End Sub
    

    Solange die Bedingung erfüllt ist, werden die Anweisungen in der Schleife weiterhin ausgeführt (achten Sie jedoch darauf, dass keine Endlosschleife entsteht).

    Unten sehen Sie das zuvor besprochene Schleifenmakro, das in eine While-Schleife umgewandelt wurde:

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'Die Startnummer (in diesem Fall ist es die Zeilennummer und der Wert, auf den gesetzt wird)
    
        While num <= 12 'Solange die Num-Variable kleiner oder gleich 12 ist, werden die Anweisungen ausgeführt
           Cells(num, 1) = num 'Nummerierung
           num = num + 1 'Die Zahl wird bei jedem Schleifendurchlauf um 1 erhöht
        Wend
           
    End Sub
    

    Mit dieser Schleife in einem Makro müssten wir, wenn wir 400 statt 12 Bänder benötigen, lediglich 12 durch 400 ersetzen.

    DO ... LOOP

    Es gibt eine andere Möglichkeit, eine Schleife zu schreiben, die genauso funktioniert wie While Wend (sie wird ausgeführt, solange eine bestimmte im Befehl While enthaltene Bedingung wahr ist):

    Sub do_while_loop()
    
        Do While [Zustand]
            'Anweisungen
        Loop
    
    End Sub
    

    Die folgende Version zeigt, dass die Bedingung am Ende der Do Loop-Schleife geschrieben werden kann, was bedeutet, dass die Anweisungen genau mindestens einmal ausgeführt werden:

    Sub do_while_loop()
    
        Do
            'Anweisungen
        Loop While [Zustand]
    
    End Sub
    

    Anstatt eine Schleife zu durchlaufen, während die Bedingung erfüllt ist, können wir die Schleife auch durch eine Bedingung verlassen, indem wir While durch Until ersetzen:

    Sub do_while_loop()
    
        Do Until [Zustand]
            'Anweisungen
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Anweisungen
        Next
    
    End Sub
    

    Die For-Schleife wird hier fünfmal wiederholt.

    Bei jeder Wiederholung dieses Zyklus wird die Variable i automatisch um 1 erhöht:

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    Früher Schleifenausgang (Exit)

    Mit der folgenden Anweisung ist es möglich, die For-Schleife vorzeitig zu verlassen:

    Exit For 'Verlassen Sie die For-Schleife
    

    Betrachten wir ein Beispiel, das dies deutlich zeigt:

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'In Zelle A1 haben wir das Limit für die Anzahl der Wiederholungen angegeben
    
        For i = 1 To 7 'Erwartete Anzahl an Zyklen: 7
           If i > max_loops Then 'Wenn Zelle A1 leer ist oder eine Zahl kleiner als 7 enthält, reduzieren Sie die Anzahl der Wiederholungen
               Exit For 'Wenn die vorherige Bedingung TRUE ist, dann ist der Ausgang aus der Schleife For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Andere Exit-Operatoren:

    Exit Do 'Schleifenausgang Do Loop
    
    Exit Sub 'Verlassen Sie den Vorgang
    
    Exit Function 'Exit-Funktion