Wie Du in VBA Schleifen die Arbeit machen lassen kannst (Teil III)

In den beiden vorangegangenen Artikeln in dieser Serie hast Du die For-Next-Schleife kennengelernt. Du hast Werte hoch und runter zählen und per MsgBox ausgeben lassen. Schließlich hast Du die For-Next-Schleifen so programmiert, dass die Wochentage senkrecht bzw. waagerecht in Zellen eingetragen wurden.

Heute geht es um die Do-Schleifen.

Do-Loop, Do-While und Do-Until sind Prüfschleifen. Bei Prüfschleifen wird die Prozedur solange durchlaufen, wie eine Bedingung wahr oder falsch ist.

Was ist nun eine Do-Loop-Schleife?

Eine Do-Loop-Schleife enthält keine Zählvariablen. Die Anweisung wird solange ausgeführt bis eine Bedingung erfüllt ist. Aber aufgepasst: Ist keine Bedingung vorgegeben, kann sich eine solche Schleife zur Endlosschleife entwickeln. D.H. das Makro kommt nicht zum Ende und läuft endlos.

Das könnte z.B. passieren, wenn Du einer Variablen den Wert 1 zuweist und in der Do-Loop-Schleife verlangst, dass die Variable – 1 und dann wieder + 1 gerechnet wird.

DoLoop1

Nun warst Du aber vielleicht doch neugierig und hast wider aller guten Worte das Makro gestartet? Außer, dass Du die Eieruhr als Zeichen für Arbeit siehst, passiert gar nichts, jedenfalls nicht sichtbar. Aber das Makro läuft und läuft.

Es wird ununterbrochen gerechnet: 1 – 1 + 1 – 1 + 1 – 1 + 1 usw. Im Makro ist keine Anweisung enthalten, die das beendet. Wie kannst Du die Endlosschleife nun stoppen?

Drücke die ESC-Taste ein paar Sekunden und klicke dann auf Beenden.

Das Do startet übrigens die Anweisung. Bei Loop wird wieder auf Do zurück gegangen und die Schleife erneut durchlaufen, bis, ja bis eine Bedingung erfüllt ist.

Deshalb willst Du nun einen nächsten Schritt machen und eine Bedingung in die Schleife einbauen. Z.B. soll von 1 an aufwärts gezählt werden. Das Makro soll stoppen, wenn die Zahl 3387 erreicht ist. Das Makro könnte so aussehen:

Sub DoLoop2()

Dim intZahl As Integer

intZahl=1

Do

intZahl=intZahl+1

If intZahl=3387 Then

MsgBox („Die Zahl 3387 ist erreicht!“)

Exit Do

End If

Loop

End Sub

Neu für Dich ist die eingebaute If-Anweisung. Eine If-Anweisung ist nichts anderes als eine WENN-Anweisung in Excel.

„Übersetzt“ bedeutet die Anweisung:

Wenn intZahl=3387, dann lasse eine MsgBox mitteilen, dass die Zahl 3387 erreicht ist. Dann beende die Prozedur mit „Exit Do“.

Eine If-Anweisung muss in VBA immer mit „End If“ beendet werden.

Ein weiteres Beispiel:

Sub DoLoop3()

Dim intZeile As Integer

Dim intZähler As Integer

Dim intMult As Integer

intZeile=Range(„A2“).Row

intZähler=2

intMult=2

Do

intMult=intMult+1

intZeile=intZeile+(intMult*intZähler)

If intMult=10 Then

MsgBox intZeile

Range(„B213“)=Range(„A“&intZeile).Value

Exit Do

End If

Loop

End Sub

In B213 steht nach Ausführung des Makros nun der Inhalt aus Zelle A106: „Die Wochentage sollen in Spalte H, also Spalte 8, ab Zeile 96 aufgelistet werden.“

In diesem Beispiel sind drei Variablen deklariert. Dim intZeile dient der Bestimmung des Ausgangspunktes, ihr wird später der Wert 2 zugewiesen. Zeile 2 ist also die Startzeile.

Dim intZähler bestimmt, in welchen Schritten vorwärts gegangen werden soll, hier auch 2.

Schließlich bestimmt Dim intMult den Multiplikator für intZähler, hier auch 2.

Klingt kompliziert, da gebe ich Dir recht. Was also passiert genau?

1. Schritt: intMult wird von 2 auf 3 erhöht, intZeile errechnert sich neu: 2+(3*2)=8

2. Schritt: intMult wird von 3 auf 4 erhöht, intZeile errechnet sich neu: 8+(4*2)=16

usw.

Die nachfolgende Abbildung zeigt alle Programmschritte, bis letztlich Zeile 106 erreicht ist, dann, wenn intMult den Wert 10 erreicht hat.

DoLoop2

Die Formeln in dieser Tabelle lauten:

O5     =O4+1

P5     =P4+(O5*N5)

Das Makro gibt zum Schluss in Zelle B213 den in A106 enthaltenen Text aus.

Damit sollen genug Anregungen zum Thema Do-Loop-Schleifen gegeben sein.

Merke: Wenn keine Bedingungen im Makro gesetzt sind, kann schnell eine Endlosschleife entstanden sein. Damit das nicht passiert, hast Du in die Do-Anweisungen jeweils eine If-Anweisung eingebaut.

Probier einfach mal eigene Idden aus, Du weißt ja, eine Endlosschleife kannst Du zur Not mit der ESC-Taste beenden.

In 14 Tagen geht es weiter mit Do-While- und Do-Until-Schleifen, bis dahin.

Siehe auch:

Wie Du in VBA Schleifen die Arbeit machen lassen kannst (Teil I)

Wie Du in VBA Schleifen die Arbeit machen lassen kannst (Teil II)

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s