Schleifen in VBA

Es gibt Situationen, in denen ein VBA-Programm denselben Satz von Aktionen mehrmals hintereinander ausführen muss (d. h. denselben Codeblock mehrmals wiederholen muss). Dies kann mit VBA-Schleifen erfolgen.

Zu den VBA-Schleifen gehören:

Als nächstes werfen wir einen genaueren Blick auf jeden dieser Zyklen.

For-Schleifenoperator in Visual Basic

Die Struktur des Schleifenoperators Das in Visual Basic kann in einer von zwei Formen organisiert werden: als Schleife Fürs nächste oder als Schleife Für jedes.

Zyklus „Für … Weiter“

Zyklus Fürs nächste verwendet eine Variable, die nacheinander Werte aus einem bestimmten Bereich annimmt. Bei jeder Änderung des Wertes der Variablen werden die im Hauptteil des Zyklus eingeschlossenen Aktionen ausgeführt. Dies ist an einem einfachen Beispiel leicht verständlich:

Für i = 1 bis 10 Gesamt = Gesamt + iArray(i) Weiter i

In dieser einfachen Schleife Fürs nächste Variable verwendet wird i, die nacheinander die Werte 1, 2, 3, … 10 annimmt, und für jeden dieser Werte wird der VBA-Code innerhalb der Schleife ausgeführt. Somit summiert diese Schleife die Elemente des Arrays. iArray in variabel Gesamt.

Im obigen Beispiel ist das Schleifeninkrement nicht angegeben, um die Variable zu inkrementieren i von 1 bis 10, der Standardwert ist ein Inkrement 1… In einigen Fällen ist es jedoch erforderlich, unterschiedliche Inkrementwerte für die Schleife zu verwenden. Dies kann mit dem Schlüsselwort erfolgen Schrittwie im folgenden einfachen Beispiel gezeigt.

Für d = 0 bis 10 Schritt 0.1 dGesamt = dGesamt + d Weiter d

Da im obigen Beispiel der Inkrementschritt gleich gesetzt wird 0.1, dann die Variable dGesamt für jede Wiederholung des Zyklus nimmt die Werte 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 an.

Um den Schleifenschritt in VBA zu bestimmen, können Sie einen negativen Wert verwenden, zum Beispiel so:

Für i = 10 bis 1 Schritt -1 iArray(i) = i Next i

Hier ist das Inkrement -1, also die Variable i nimmt bei jeder Wiederholung des Zyklus die Werte 10, 9, 8, … 1 an.

Schleife „Für jeden“

Zyklus Für jedes ähnlich einem Kreislauf Fürs nächste, sondern anstatt über die Wertefolge für die Zählervariable zu iterieren, die Schleife Für jedes führt eine Reihe von Aktionen für jedes Objekt in der angegebenen Gruppe von Objekten aus. Im folgenden Beispiel wird eine Schleife verwendet Für jedes listet alle Blätter in der aktuellen Excel-Arbeitsmappe auf:

Dim wSheet als Arbeitsblatt für jedes wSheet in Arbeitsblättern MsgBox "Найден лист: " & wSheet.Name Nächstes wSheet

Loop-Interrupt-Anweisung „Exit For“

Operator Exit für verwendet, um den Zyklus zu unterbrechen. Sobald diese Anweisung im Code angetroffen wird, beendet das Programm die Ausführung der Schleife und fährt mit der Ausführung der Anweisungen fort, die sich unmittelbar nach dieser Schleife im Code befinden. Dies kann beispielsweise verwendet werden, um in einem Array nach einem bestimmten Wert zu suchen. Dazu wird mit einer Schleife jedes Element des Arrays abgetastet. Sobald das gesuchte Element gefunden ist, muss der Rest nicht mehr durchsucht werden – der Kreislauf wird unterbrochen.

Operator-Anwendung Exit für im folgenden Beispiel demonstriert. Hier iteriert die Schleife über 100 Array-Einträge und vergleicht jeden mit dem Wert der Variablen dWert… Wenn eine Übereinstimmung gefunden wird, wird die Schleife beendet:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Die Do While-Schleife in Visual Basic

Zyklus Mach während führt einen Codeblock aus, solange die angegebene Bedingung erfüllt ist. Das Folgende ist ein Beispiel für ein Verfahren Sub, in denen die Schleife verwendet wird Mach während Fibonacci-Zahlen, die 1000 nicht überschreiten, werden nacheinander angezeigt:

'Unterprozedur gibt Fibonacci-Zahlen aus, die 1000 nicht überschreiten. Sub Fibonacci() Dim i As Integer 'Zähler zur Angabe der Position des Elements in der Sequenz. Dim iFib As Integer 'speichert den aktuellen Wert der Sequenz. Dim iFib_Next As Integer 'speichert den nächsten Wert der Sequenz Dim iStep As Integer 'Speichert die Größe des nächsten Inkrements 'Variablen initialisieren i und iFib_Next i = 1 iFib_Next = 0 'Do While-Schleife wird ausgeführt, bis der Wert von 'der aktuellen Fibonacci-Zahl größer als 1000 ist Do While iFib_Next < 1000 If i = 1 Then 'Sonderfall für erstes Element iStep = 1 iFib = 0 Else 'speichere die Größe des nächsten Inkrements vor dem Überschreiben' den aktuellen Wert der Sequenz iStep = iFib iFib = iFib_Next End If 'drucke die aktuelle Fibonacci-Zahl in Spalte A von das aktive Arbeitsblatt 'in der Zeile mit Index i Cells(i , 1).Value = iFib 'berechne die nächste Fibonacci-Zahl und erhöhe den Elementpositionsindex um 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Im gegebenen Beispiel ist die Bedingung iFib_Next < 1000 am Anfang der Schleife überprüft. Wenn also der erste Wert iFib_Weiter Wenn es mehr als 1000 gäbe, würde die Schleife nie ausgeführt werden.

Eine andere Möglichkeit, eine Schleife zu implementieren Mach während - Platziere die Bedingung nicht am Anfang, sondern am Ende der Schleife. In diesem Fall wird die Schleife mindestens einmal ausgeführt, unabhängig davon, ob die Bedingung erfüllt ist.

Schematisch ein solcher Kreislauf Mach während mit der zu prüfenden Bedingung am Ende sieht so aus:

Do ... Loop While iFib_Next < 1000

Цикл «Do Until» in Visual Basic

Zyklus Machen bis dem Zyklus sehr ähnlich Mach während: Der Codeblock im Hauptteil der Schleife wird immer wieder ausgeführt, bis die angegebene Bedingung erfüllt ist (das Ergebnis des bedingten Ausdrucks ist Wahre). Im nächsten Verfahren Sub mit einem Kreislauf Machen bis Werte aus allen Zellen einer Spalte abrufen A Arbeitsblatt, bis die Spalte auf eine leere Zelle trifft:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'Der Wert der aktuellen Zelle wird im Array dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop gespeichert

Im obigen Beispiel die Bedingung IsEmpty(Cells(iRow, 1)) befindet sich am Anfang der Struktur Machen bis, also wird die Schleife mindestens einmal ausgeführt, wenn die erste genommene Zelle nicht leer ist.

Allerdings, wie in den Schleifenbeispielen gezeigt Mach während, ist es in einigen Situationen erforderlich, dass die Schleife mindestens einmal ausgeführt wird, unabhängig vom anfänglichen Ergebnis des bedingten Ausdrucks. In diesem Fall sollte der bedingte Ausdruck wie folgt am Ende der Schleife platziert werden:

Do ... Schleife bis IsEmpty(Cells(iRow, 1))

Hinterlassen Sie uns einen Kommentar