VBA For Schleife

VBA For Schleife
VBA For Schleife

VBA For Schleife

Du möchtest die VBA For Schleife zum Durchlaufen von z. B. Zellen verwenden, oder verstehen, was Schleifen sind?

Dann starte jetzt durch und lerne in meinem heutigen Beitrag alles Wissenswerte über das für die Programmierung essentielle Thema namens „Schleifen„.

Vielleicht möchtest Du zu einem späteren Zeitpunkt auch in meine folgenden anderen Beiträge reinschauen: MsgBox, Range, VBA Array

Nicht aus dem Luftverkehr

Anders als man eventuell als Nicht-Entwickler denken könnte, haben Schleifen in der Softwareentwicklung nichts mit „eine Schleife fliegen“ zu tun.

Okay, zugegebenermaßen wiederholen Flugzeuge ja beim SchleifenZiehen auch vermutlich gewisse Muster – insofern ich das beurteilen kann..

So ähnlich läuft es auch bei einer Schleife in der Softwareentwicklung, denn auch dort werden gewisse Prozesse wiederholt, oder zumindest ähnlich abgearbeitet.

Denke an ein Kartenspiel

StellDir mal ein gutes altes Kartenspiel wie z. B. Mau-Mau, oder auch Skip-Bo wenn Du möchtest vor.

Meistens werden dort aus einem vorhandenen Deck eine gewisse Anzahl an Karten gezogen.

Diese müssen natürlich einerseits aus dem Deck verschwinden und andererseits in Deine Hand aufgenommen werden.

So wie ich die Mau-Mau Regeln kenne, zieht jeder Spieler zu Beginn des Spiels 7 Karten aus dem Deck und sortiert Diese wie Ihm beliebt.

Der Bezug zum Code – VBA For Schleife

Fangen wir nun einmal an, mit dem folgenden Beispiel den konkreten Bezug zum Code herzustellen.

Prozesse aufrufen

Wer Schleifen noch nicht kennt, bzw. Diese z. B. meidet, kommt vielleicht auf die Idee, folgende Prozesse statt eine Schleife zu verwenden, mehrfach aufzurufen:

' Do Step 1
' Do Step 2
' Do Step 3

Manuell mehrfach aufrufen

Dieser jemand würde also die obigen drei Schritte – hier einfach nur als Kommentare dargestellt – ggf. so aufrufen:

' Do Step 1
' Do Step 2
' Do Step 3

' Do Step 1
' Do Step 2
' Do Step 3

' 3x more

Die Nachteile – bitte nicht machen!

Die dabei auftretenden Probleme stechen einem unerfahrenen Programmierer häufig nicht direkt ins Auge.

Folgeänderungen

Früher oder später wird man allerdings z. B. auf das Problem stoßen, dass Änderungen an Schritt 2 alle 5 Code-Blöcke betreffen.

Man müsste also um praktisch eine Sache zu ändern, 5 Punkte anpassen und je nachdem wie groß der jeweilige Punkt ist, hat man auch den Aufwand – würg!

Dieses Problem könnte natürlich durch den Bau einer Sub gelöst werden:

Sub DoThings()
    ' Do Step 1
    ' Do Step 2
    ' Do Step 3
End Sub

Der Aufruf würde dann durch die Verwendung der Sub so aussehen:

DoThings()
DoThings()
DoThings()
DoThings()
DoThings()

Das ist natürlich auch nicht wirklich besser, wenn wir an das Beispiel mit dem Kartenspiel denken, denn allein die Formulierung macht es aus:

"..beim Start des Spiels, zieht jeder Spieler X Karten"

Duplicated Code

Ein weiteres Problem, Welches der obige Code ganz klar an den Tag legt, ist das Vorhandensein von „Duplicated Code„.

Wir wiederholen also bestehenden Code, statt ihn korrekterweise in einer Schleife aufzurufen.

Jedes Mal, wenn man z. B. die Bezeichnung der Sub ändern würde, müsste man im schlimmsten Fall alle anderen Vorkommnisse manuell ändern.

Natürlich gibt es auch Funktionen der Entwicklungsumgebung, Welche uns dabei helfen könnten, allerdings ist das ja nicht das Ziel des Ganzen.

VBA For Schleife selbst

Kommen wir nun zur ForSchleife bezogen auf das Beispiel selbst, womit wir die obigen Probleme vermeiden:

For i = 1 To 5
    DoThings()
Next

Diese Schleifen-Art nennt man auch zählergesteuerte und kopfgesteuerte Schleife, denn Sie benutzt eine ZählerVariable namens „i“.

Ebenso verwendet die Schleife die Bedingung zur Ausführung im Kopf, dass heißt, dass die Schleife nur ausgeführt wird, solange und nur wenn die Bedingung „True“ ergibt.

VBA For Schleife rückwärts

Besonders cool ist auch die Möglichkeit die Schleife mit wenig Aufwand einfach rückwärts laufen zu lassen:

For i = 5 To 1 Step -1
    DoThings()
Next

Schreibe einen Kommentar

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