Der einfachste Schleifentyp in der Excel-VBA-Programmierung ist eine For-Next-Schleife. Die Schleife wird durch eine Zählervariable gesteuert, die bei einem Wert beginnt und bei einem anderen Wert endet. Die Anweisungen zwischen der For-Anweisung und der Next-Anweisung sind die Anweisungen, die in der Schleife wiederholt werden.
Ein For-Next-Beispiel
Im folgenden Beispiel wird eine For-Next-Schleife verwendet, um die ersten 1.000 positiven Zahlen zu summieren. Die Variable Total beginnt mit Null. Dann tritt die Schleife auf. Die Variable Cnt ist der Schleifenzähler. Es beginnt mit 1 und wird jedes Mal durch die Schleife um 1 erhöht. Die Schleife endet, wenn Cnt 1.000 beträgt.
Dieses Beispiel enthält nur eine Anweisung innerhalb der Schleife. Diese Anweisung addiert den Wert von Cnt zur Variablen Total. Wenn die Schleife beendet ist, zeigt eine MsgBox die Summe der Zahlen an.
Sub AddNumbers()
Summe als doppelt dimmen
Dim Cnt As Long
Gesamt = 0
Für Cnt = 1 bis 1000
Gesamt = Gesamt + Cnt
Nächster Cnt
MsgBox Gesamt
End Sub
Da der Schleifenzähler eine normale Variable ist, können Sie Code schreiben, um seinen Wert innerhalb des Codeblocks zwischen den Anweisungen For und Next zu ändern. Dies ist jedoch eine sehr schlechte Praxis.
For-Next-Beispiele mit einem Schritt
Sie können einen Step-Wert verwenden, um einige Zählerwerte in einer For-Next-Schleife zu überspringen. Hier ist das vorherige Beispiel, umgeschrieben, um nur die ungeraden Zahlen zwischen 1 und 1.000 zu summieren:
Sub AddOddNumbers()
Summe als doppelt dimmen
Dim Cnt As Long
Gesamt = 0
Für Cnt = 1 bis 1000 Schritt 2
Gesamt = Gesamt + Cnt
Nächster Cnt
MsgBox Gesamt
End Sub
Dieses Mal beginnt Cnt mit 1 und nimmt dann die Werte 3, 5, 7 usw. an. Der Step-Wert bestimmt, wie der Zähler inkrementiert wird. Beachten Sie, dass der obere Schleifenwert (1000) nicht tatsächlich verwendet wird, da der höchste Wert von Cnt 999 beträgt.
Hier ist ein weiteres Beispiel, das einen Step-Wert von 3 verwendet. Dieses Verfahren funktioniert mit dem aktiven Blatt und wendet eine hellgraue Schattierung auf jede dritte Zeile von Zeile 1 bis Zeile 100 an.
Sub ShadeEveryThirdRow()
Dim ich so lang
Für i = 1 bis 100 Schritt 3
Zeilen(i).Innenraum.Farbe = RGB(200, 200, 200)
Als nächstes
End Sub
Sehen Sie sich das Ergebnis der Ausführung dieses Makros an.

Verwenden einer Schleife zum Anwenden von Hintergrundschattierung auf Zeilen.
Ein For-Next-Beispiel mit einer Exit For-Anweisung
Eine For-Next-Schleife kann auch eine oder mehrere Exit For-Anweisungen innerhalb der Schleife enthalten. Wenn VBA auf diese Anweisung stößt, wird die Schleife sofort beendet.
Das folgende Beispiel veranschaulicht die Exit For-Anweisung. Diese Routine ist eine Funktionsprozedur, die in einer Arbeitsblattformel verwendet werden soll. Die Funktion akzeptiert ein Argument (eine Variable namens Str) und gibt die Zeichen links von der ersten Ziffer zurück. Wenn das Argument beispielsweise „KBR98Z“ lautet, gibt die Funktion „KBR“ zurück.
Funktion TextPart(Str)
Dim ich so lang
Textteil = „“
Für i = 1 zu Len(Str)
If IsNumeric(Mid(Str, i, 1)) Then
Beenden für
Anders
TextPart = TextPart & Mid(Str, i, 1)
Ende Wenn
Als nächstes
Endfunktion
Die For-Next-Schleife beginnt mit 1 und endet mit der Zahl, die die Anzahl der Zeichen in der Zeichenfolge darstellt. Der Code verwendet die Mid-Funktion von VBA, um ein einzelnes Zeichen innerhalb der Schleife zu extrahieren. Wird ein numerisches Zeichen gefunden, wird die Exit For-Anweisung ausgeführt und die Schleife vorzeitig beendet.
Wenn das Zeichen nicht numerisch ist, wird es an den zurückgegebenen Wert (der mit dem Namen der Funktion identisch ist) angehängt. Die Schleife untersucht nur dann jedes Zeichen, wenn die als Argument übergebene Zeichenfolge keine numerischen Zeichen enthält.
Ein verschachteltes For-Next-Beispiel
Sie können eine beliebige Anzahl von Anweisungen in der Schleife haben und For-Next-Schleifen in anderen For-Next-Schleifen verschachteln.
Im folgenden Beispiel wird eine verschachtelte For-Next-Schleife verwendet, um Zufallszahlen in einen Zellbereich von 12 Zeilen mal 5 Spalten einzufügen. Beachten Sie, dass die Routine die innere Schleife (die Schleife mit dem Row-Zähler) einmal für jede Iteration der äußeren Schleife (die Schleife mit dem Col-Zähler) ausführt . Mit anderen Worten, die Routine führt die Anweisung Cells(Row, Col) = Rnd 60 Mal aus.

Diese Zellen wurden unter Verwendung einer verschachtelten For-Next-Schleife gefüllt.
Sub FillRange()
Dim Col As Long
Dim Row As Long
Für Spalte = 1 bis 5
Für Reihe = 1 bis 12
Zellen(Reihe, Spalte) = Rnd
Nächste Reihe
Nächste Farbe
End Sub
Das nächste Beispiel verwendet verschachtelte For-Next-Schleifen, um ein dreidimensionales Array mit dem Wert 100 zu initialisieren. Diese Routine führt die Anweisung in der Mitte aller Schleifen (die Zuweisungsanweisung) jeweils 1.000 Mal (10 * 10 * 10) aus mit einer anderen Kombination von Werten für i, j und k:
Sub NestedLoops()
Dim MyArray(10, 10, 10)
Dim ich so lang
Dim j As Long
Dim k As Long
Für i = 1 bis 10
Für j = 1 bis 10
Für k = 1 bis 10
MyArray(i, j, k) = 100
Nächstes k
Nächstes j
Als nächstes
'Andere Aussagen gehen hier
End Sub
Hier ist ein letztes Beispiel, das verschachtelte For-Next-Schleifen mit einem Step-Wert verwendet. Dieses Verfahren erstellt ein Schachbrett, indem die Hintergrundfarbe abwechselnder Zellen geändert wird.

Verwenden von Schleifen zum Erstellen eines Schachbrettmusters.
Der Zeilenzähler durchläuft eine Schleife von 1 bis 8. Ein If-Then-Konstrukt bestimmt, welche verschachtelte For-Next-Struktur verwendet werden soll. Bei ungeraden Zeilen beginnt der Col-Zähler mit 2. Bei geraden Zeilen beginnt der Col-Zähler mit 1. Beide Schleifen verwenden einen Step-Wert von 2, sodass alternative Zellen betroffen sind. Zwei zusätzliche Anweisungen machen die Zellen quadratisch (genau wie ein echtes Schachbrett).
Unter MakeCheckerboard()
Dim R so lang, C so lang
Für R = 1 bis 8
Wenn WorksheetFunction.IsOdd(R) Then
Für C = 2 bis 8 Schritt 2
Zellen(R, C).Interior.Color = 255
Nächstes C
Anders
Für C = 1 bis 8 Schritt 2
Zellen(R, C).Interior.Color = 255
Nächstes C
Ende Wenn
Nächstes R
Zeilen("1:8").RowHeight = 35
Spalten("A:H").ColumnWidth = 6,5
End Sub