Auswahlstrukturen

If ... Then ... Else
Diese Entscheidungsstruktur gibt es in zwei Formen: Einzeilig und strukturiert. Bei einzeiliger Verwendung gilt die Syntax:
 
'einzeilige Syntax
If Bedingung Then Anweisung1 [Else Anweisung2]

'mehrzeilige Syntax
If Bedingung1 then
    Anweisungen 1
ElseIf Bedingung2 then
    Anweisungen 2
....
Else
    Anweisungen X
Endif

In strukturierter Form werden mehrere Zeilen benötigt. Dabei kann eine beliebige Zahl von ElseIf -Abfragen eingeschoben werden. Auf diese Weise kann eine Mehrfachverzweigung konstruiert werden. Wichtig ist jedoch, daß stets nur ein Anweisungszweig ausgeführt wird. Wenn mehrere Bedingungen zutreffen, führt nur die jeweils erste zu einer Anweisungsfolge und dann zum Verlassen der Entscheidungsstruktur.
In beiden Formen der If-Abfrage kann höchstens einmal "Else" verwendet werden. Es bedeutet nämlich "alle anderen Fälle".

Select-Case
Diese Auswahlstruktur prüft, ob die hinter Case angegebenen Variablenwerte den tatsächlichen entsprechen und führt gegebenenfalls den zugehörigen Anweisungsblock aus. Hinter Case kann auch eine durch Komma getrennte Menge von Variablenwerten folgen. CaseElse kommt dann zur Ausführung, wenn es vorher keinen Treffer gab.
 
Select Case VariablenName
Case Variablenwert 1
   Anweisungen 1
Case Variablenwert 2
   Anweisungen 2
...
[Case Else
   Anweisungen X]
End Select


Switch

Einfache Auswahl unter zwei oder mehr Möglichkeiten. Es wird der Wert zurückgeliefert, bei dem die Bedingung erfüllt ist.
 
wert = Switch ( Bedingung1, Wert1 [, Bedingung2, Wert2... ])  



IIf

Liefert in Abhängigkeit von der Bedingung den ersten Wert (bei true) sonst den zweiten (bei false)
 
wert = IIf (bedingung, wert1, wert2)


Choose

Liefert je nach dem Zahlenwert von zahl den ersten, zweiten, ... Wert zurück.
 
wert = Choose ( zahl, wert1, wert2, wert3, ..)


Schleifenstrukturen

Dienen generell der Abarbeitung von vielfach zu wiederholenden Rechengängen. Immer besteht die Gefahr, daß die Schleife keine Ende findet. Abbrüche können beim Eintreten bestimmter Bedingungen mit Exit erzwungen werden. Alternativ kann mit DoEvents jede Schleife abbrechbar gemacht werden, wenn denn ein zughöriges Windows-Ereignis dies verlangt. (z.B. Abbruch-Taste). Eigentlich sollte eine solche Möglichkeit immer vorgesehen werden, speziell, wenn es um aufwendige Rechnungen geht, die lange dauern. Leider verlangsamt  ausgerechnet dieser Befehl die Abarbeitung von Schleifen erheblich.


Do ... Loop
Die variabelste Schleifenstruktur.
 
Abbruchbedingung am Anfang

Abbruchbedingung am Ende

Do [while | until ] Bedingung
           [Anweisungen]
[if Bedingung then Exit Do]
           [Anweisungen]
Loop
Do
           [Anweisungen]
[if Bedingung then Exit Do]
           [Anweisungen]
Loop [while | until ] Bedingung

In den Fenstern jeweils eine  Exit Do-Klammer als Option eingefügt. Das vorzeitige Verlassen einer Schleifenstruktur sollte im Programm die absolute Ausnahme sein. Ein möglicher, legitimer Fall ist das Auftretens eines Fehlers.

Eine notwendige Anmerkung zu den Abbruchbedingungen: Man muß immer sicherstellen, daß Abbrüche auch eintreten können. Wenn ein "Wert1" z.B. in Zehntel-Schritten anwächst, dann führt eine Bedingung "Wert1=1999"  mit ziemlicher Sicherheit nicht zum Schleifenabbruch. Wert1 wird nämlich stattdessen so etwas wie die Folge 1998,999933 .. 1999,000033 durchlaufen. In solchen Fällen besser "Wert1>=1999" wählen.


For .. Next

Wenn die Anzahl erforderlicher Umläufe vorher bekannt ist, hat die For.. Next-Schleife Vorteile, weil sie schnell und platzsparend abgearbeitet wird. Wird Step nicht angegeben, dann wird der Zähler bei jedem Umlauf um 1erhöht. Beliebter Fehler: Die Zählvariable kann innerhalb der Schleife (ungewollt) manipuliert werden, die Schleife bricht zum falschen Zeitpunkt oder gar nicht mehr ab.
 
For Zähler = Anfang to Ende [Step Schritt]
           [Anweisungen]
Next



For Each ... Next
Eine ähnliche Struktur wie die For ... Next -Schleife hat die For Each...Next-Schleife, die Anweisungen für alle Elemente eines Datenfeldes oder einer Auflistung ausführt. (Nichts für Anfänger!)
 
For Each element In gruppe
           [Anweisungen]
Next


While ... Wend
 
While Bedingung
           [Anweisungen]
Wend


With-Anweisung

Eine Schleife, die prinzipiell nur einmal durchlaufen wird
 
With Objekt
          [Anweisungen]
[If Bedingung Exit With]
          [Anweisungen]
End With

Die With-Konstruktion erleichtert lediglich die Schreibung und erhöht die Ausführungsgeschwindigkeit. So genügt für einen benutzerdefinierten Datentyp die einmalige Angabe des Namens in der Kopfzeile, Zuweisungen erfolgen dann im Funktionskörper mit der Syntax ".zugehörige_Variable = ...".