Inhaltsverzeichnis

Schleifen

Allgemein

Schleifen werden verwendet, um Anweisungen mehrmals auszuführen. Jeder Schleifendurchlauf wird als Iteration bezeichnet. Eine Schleife, deren Abbruchbedingung nie erfüllt wird, bezeichnet man als Endlosschleife.

Ist die Anzahl der Schleifendurchläufe bekannt, so wird meistens eine For-Schleife verwendet. Hängt der Abbruch der Schleife von einer beliebigen Bedingung ab, so wird eine Do-Loop- oder Do-While-Schleife verwendet.

Einen Spezialfall stellt die For-Each-Schleife dar, die für das Durchlaufen von Objektsammlungen verwendet wird.

Die folgenden Codebeispiele verwenden die Anweisung Debug.Print um in das Ausgabefenster zu schreiben. Blenden Sie das Ausgabefenster im VBA-Editor über den Menübefehl Ansicht - Direktfenster ein.

For-Schleife

Die For-Schleife verwendet eine Variable, die bei jedem Schleifendurchlauf automatisch um 1 erhöht wird. Überschreitet der Variablenwert einen gegebenen Endwert, so wird die Schleife beendet.

Die Schleifenvariable ist meistens vom Datentyp Integer und wird mit i bezeichnet. Die Deklaration der Schleifenvariable muss ausserhalb der Schleife erfolgen.

'Ausgabe der Zahlen von 1 bis 100 im Ausgabefenster
Dim i as Integer
For i = 1 To 100
  Debug.Print i
Next i

Durch die Zusatzangabe von Step kann ein beliebiger Wert angegeben werden, um den die Schleifenvariable bei jedem Durchlauf verändert wird.

Im folgenden Beispiel ist die letzte ausgegebene Zahl 99.

'Ausgabe der Zahlen von 1 bis 100 in 2er-Schritten im Ausgabefenster
Dim i as Integer
For i = 1 To 100 Step 2
  Debug.Print i
Next i

Wird ein negativer Step angegeben, so muss der Endwert der Variable kleiner als der Startwert sein.

'Ausgabe der Zahlen von 100 bis 1 im Ausgabefenster
Dim i as Integer
For i = 100 To 1 Step -1
  Debug.Print i
Next i

Mehrere For-Schleifen können ineinander verschachtelt werden. Bei jedem Durchlauf der äusseren Schleife wird die innere Schleife komplett durchlaufen.

Beachten Sie, dass jede Schleife ihre eigene Schleifenvariable besitzt.

'Zahlen von 1 bis 10 werden drei Mal im Ausgabefenster ausgegeben
Dim i as Integer
Dim j as Integer
For i = 1 To 3
  For j = 1 To 10
    Debug.Print j
  Next j
Next i

In Excel kann eine Zelle im aktiven Tabellenblatt über die Cells-Anweisung angesprochen werden. Die Cells-Anweisung benötigt die Angabe des Zeilenindex und des Spaltenindex.

Im folgenden Beispiel wird die Schleifenvariable zur Angabe des Zeilenindex verwendet.

'Befüllen der Zellen A1 bis A10 mit den Zahlen 1 bis 10
Dim i As Integer
For i = 1 To 10
  Cells(i, 1) = i
Next i

Im folgenden Beispiel wird die Schleifenvariable zur Angabe des Spaltenindex verwendet.

'Befüllen der Zellen A1 bis J1 mit den Zahlen 1 bis 10
Dim i As Integer
For i = 1 To 10
  Cells(1, i) = i
Next i

Im folgenden Beispiel wird die Schleifenvariable i zur Angabe des Zeilenindex und die Schleifenvariable j zur Angabe des Spaltenindex verwendet.

'Befüllen der ersten drei Zeilen mit den Zahlen 1 bis 10 in den Spalten A bis J
Dim i As Integer
Dim j As Integer
For i = 1 To 3
  For j = 1 To 10
    Cells(i, j) = j
  Next j
Next i

Do-Loop-Schleife

Die Do-Loop-Schleife erfordert die Formulierung einer Bedingung, die das Beenden der Schleife steuert. Hierbei können Sie angeben, ob die Schleife läuft, bis (Until) eine Bedingung erfüllt ist oder ob die Schleife läuft, solange (While) eine Bedingung erfüllt ist.

Die Abbruchbedingung kann am Beginn (kopfgesteuert) oder am Ende (fussgesteuert) der Schleife angegeben werden. Eine kopfgesteuerte Schleife wird möglicherweisse nie durchlaufen, da die Abbruchbedingung am Beginn der Schleife überprüft wird. Eine fussgesteuerte Schleife wird zumindest ein Mal durchlaufen, da die Abbruchbedingung erst am Ende der Schleife überprüft wird.

'Ausgabe der Zahlen von 1 bis 100 im Ausgabefenster
'Kopfgesteuert mit Until
Dim zaehler As Integer
zaehler = 1
Do Until zaehler > 100
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop
'Ausgabe der Zahlen von 1 bis 100 im Ausgabefenster
'Kopfgesteuert mit While
Dim zaehler As Integer
zaehler = 1
Do While zaehler <= 100
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop
'Ausgabe der Zahlen von 1 bis 100 im Ausgabefenster
'Fussgesteuert mit Until
Dim zaehler As Integer
zaehler = 1
Do
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop Until zaehler > 100
'Ausgabe der Zahlen von 1 bis 100 im Ausgabefenster
'Fussgesteuert mit While
Dim zaehler As Integer
zaehler = 1
Do
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop While zaehler <= 100

Im den folgenden zwei Beispielen wird nach jedem Schleifendurchlauf mit einer Meldungsbox gefragt, ob weitergemacht werden soll. Klickt man auf 'Ja', wird die Schleife mit dem nächsten Durchlauf fortgesetzt. Klickt man auf 'Nein', wird die Schleife beendet.

'Dynamische Fortsetzung oder Beendigung der Schleife
'Fussgesteuert mit Until
Dim zaehler As Integer
zaehler = 1
Do
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop Until MsgBox("Weitermachen?", vbYesNo) <> vbYes
'Dynamische Fortsetzung oder Beendigung der Schleife
'Fussgesteuert mit While
Dim zaehler As Integer
zaehler = 1
Do
  Debug.Print zaehler
  zaehler = zaehler + 1
Loop While MsgBox("Weitermachen?", vbYesNo) = vbYes

For-Each-Schleife

Die For-Each-Schleife wird verwendet, um auf die Elemente einer Sammlung von Objekten zuzugreifen. In Excel gibt es viele Beispiele für Sammlungen: die Anweisung Worksheets liefert die Sammlung aller Tabellenblätter in der aktiven Arbeitsmappe, die Anweisung Workbooks liefert die Sammlung aller geöffneten Arbeitsmappen in der aktiven Anwendung.

Im folgenden Beispiel werden die Namen aller Tabellenblätter im Direktfenster ausgegeben. Die verwendete Variable ist vom Datentyp Worksheet, der verwendet wird, um in einer Variable ein Tabellenblatt zu referenzieren.

'Ausgabe aller Tabellenblattnamen im Ausgabefenster
Dim ws As Worksheet
For Each ws In Worksheets
  Debug.Print ws.Name
Next

Vorzeitiger Schleifenabbruch

Soll eine Schleife vorzeitig beendet werden (meist auf Grund einer weiteren Bedingung), so kann dies mit der Anweisung Exit For bei einer For- bzw. For-Each-Schleife und Exit Do bei einer Do-Loop-Schleife erfolgen.

Download Codebeispiele

Die gezeigten Codebeispiele können Sie als xlsm-Datei herunterladen.

Seitenanfang   Inhaltsverzeichnis