Die Do-Until-Schleife in VBA

dountil1

Heute geht es mit der Do-Until-Schleife weiter. Zuletzt war die Do-While-Schleife das Beitragsthema.

Auch die Do-Until-Schleife ähnelt in gewissem Sinne der Do-Loop-Schleife, denn zu Beginn des Makros steht auch hier nicht fest, wieviel Durchläufe erforderlich sind.

Um keine Endlosschleifen zu erzeugen, müssen auch bei dieser Schleife Bedingungen gesetzt werden. Das Befehlswort dafür ist hier Until. Das Wort kann sowohl hinter Do als auch hinter Loop die Bedingungen einleiten.

Ich beginne auch hier mit einem Beispiel, in dem die Anweisung, hier Until, am Anfang (hinter Do) steht. Die Werte einer Zahlenreihe sollen quadriert werden, bis das Ergebnis größer als 1750 ist.

Die Zahlenreihe sieht beispielhaft so aus, wobei die Ergebnisse der Quadrierung nicht angezeigt werden sollen:

DoUntil1

Mit diesem Makro setze ich die gestellten Bedingungen um:

Sub DoUntil1()
Dim intRow As Integer
Dim intErg As Integer
intRow = 307
Do Until intErg >= 1750
intErg = Cells(intRow, 7).Value * Cells(intRow, 7).Value
intRow = intRow + 1
Loop
MsgBox (“Der Grenzwert 1750 wird erstmalig in Zelle ” & Cells(intRow – 1, 7).Address & “überschritten!”)
End Sub

In der Cell-Anweisung habe ich von intRow noch 1 abgezogen, warum, fragst Du Dich vielleicht?

Nachdem 1750 überschritten wird (1764) wird nochmals intRow=intRow+1 gerechnet. Die Variable intRow hat jetzt schon den Wert 326 für Zeile 326. In der Zeile 325 wird aber bereits der Wert von 1750 überschritten (1764). Deshalb gehe ich von Zeile 326 einen Schritt zurück.

Die Meldung der MsgBox lautet “Der Grenzwert 1750 wird erstmalig in Zelle $G$325 überschritten!”.

Jetzt will ich das Until ans Ende (hinter Loop setzen. Dazu nehme ich die gleiche Zahlenreihe, setze den Grenzwert aber auf 1500. Dieser Wert soll nicht überschritten werden.

Mit diesem Makro setze ich das um:

Sub DoUntil2()
Dim intRow As Integer
Dim intErg As Integer
intRow = 307
Do
intErg = Cells(intRow, 7).Value * Cells(intRow, 7).Value
intRow = intRow + 1
Loop Until intErg>=1500
MsgBox (“Der Grenzwert 1500 wird erstmalig in Zelle ” & Cells(intRow – 1, 7).Address & “überschritten!”)
End Sub

Die Meldung lautet: “Der Grenzwert 1500 wird erstmalig in Zelle $G$322 überschritten!”.

Abschließend will ich den Grenzwert variabel gestalten. Dazu deklariere ich eine dritte Variable, auch wieder mit dem Datentyp Integer und setze sie ins Makro ein. Den Grenzwert trage ich mir im Beispiel in Zelle G348 ein.

Sub DoUntil3()
Dim intRow As Integer
Dim intErg As Integer
Dim intGrenz As Integer
intRow = 307
intGrenz=Range(“G348”).Value
Do
intErg = Cells(intRow, 7).Value * Cells(intRow, 7).Value
intRow = intRow + 1
Loop Until intErg>= intGrenz
MsgBox (“Der Grenzwert “& intGrenz & “wird erstmalig in Zelle ” & Cells(intRow – 1, 7).Address & “überschritten!”)
End Sub

Die Meldung lautet: “Der Grenzwert 1500 wird erstmalig in Zelle $G$321 überschritten!”. Auch das ist richtig.

Du siehst, dass der Grenzwert in der Boxmeldung als Variable eingetragen ist. Das geschieht mit:

&, Leerzeichen, Variable, Leerzeichen, &

Änderst Du die Vorgabe in G248, wird auch das Makro entsprechend reagieren und in der Boxmeldung den jeweils aktuellen Wert ausgeben.

2 Gedanken zu „Die Do-Until-Schleife in VBA“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

WordPress Cookie Plugin von Real Cookie Banner