Die Select Case-Struktur ist eine nützliche VBA-Struktur für Entscheidungen mit drei oder mehr Optionen in Excel 2016 (obwohl sie auch mit zwei Optionen funktioniert und eine Alternative zur If-Then-Else-Struktur bietet).
A Select Case-Beispiel
Das folgende Beispiel zeigt die Verwendung der Select Case-Struktur:
Unter ShowDiscount3()
Dim Menge so lang
Dim-Rabatt als Double
Menge = InputBox(“Menge eingeben:“)
Kartonmenge auswählen
Fall 0 bis 24
Rabatt = 0,1
Fall 25 bis 49
Rabatt = 0,15
Gehäuse 50 bis 74
Rabatt = 0,2
Fall ist >= 75
Rabatt = 0,25
Auswahl beenden
MsgBox „Rabatt:“ & Rabatt
End Sub
In diesem Beispiel wird die Variable Menge ausgewertet. Die Routine prüft auf vier verschiedene Fälle (0–24, 25–49, 50–74 und 75 oder mehr).
Auf jede Case-Anweisung können beliebig viele Anweisungen folgen, die alle ausgeführt werden, wenn der Fall wahr ist. Wenn Sie wie in diesem Beispiel nur eine Anweisung verwenden, können Sie die Anweisung in derselben Zeile wie das Schlüsselwort Case platzieren, wobei ein Doppelpunkt vorangestellt wird – das Trennzeichen für die VBA-Anweisung. Dadurch wird der Code kompakter und etwas übersichtlicher. So sieht die Routine in diesem Format aus:
Unter ShowDiscount4 ()
Dim Menge so lang
Dim-Rabatt als Double
Menge = InputBox(“Menge eingeben:“)
Kartonmenge auswählen
Fall 0 bis 24: Rabatt = 0,1
Fall 25 bis 49: Rabatt = 0,15
Fall 50 bis 74: Rabatt = 0,2
Fall ist >= 75: Rabatt = 0,25
Auswahl beenden
MsgBox „Rabatt:“ & Rabatt
End Sub
Wenn VBA eine Select Case-Struktur ausführt, wird die Struktur verlassen, sobald VBA einen wahren Fall findet und die Anweisungen für diesen Fall ausführt.
Ein verschachteltes Select Case-Beispiel
Wie im folgenden Beispiel gezeigt, können Sie Select Case-Strukturen verschachteln. Diese Routine untersucht die aktive Zelle und zeigt eine Nachricht an, die den Inhalt der Zelle beschreibt. Beachten Sie, dass die Prozedur drei Select Case-Strukturen hat, und jede hat ihre eigene End Select-Anweisung:
Unter CheckCell()
Dim Msg As String
Wählen Sie Fall ist leer (ActiveCell)
Fall wahr
Msg = "ist leer."
Fall sonst
Wählen Sie Case ActiveCell.HasFormula
Fall wahr
Msg = „hat eine Formel“
Fall sonst
Wählen Sie Case IsNumeric(ActiveCell)
Fall wahr
Msg = „hat eine Nummer“
Fall sonst
Msg = „hat Text“
Auswahl beenden
Auswahl beenden
Auswahl beenden
MsgBox „Cell“ & ActiveCell.Address & „“ & Msg
End Sub
Die Logik geht ungefähr so:
Finden Sie heraus, ob die Zelle leer ist.
Wenn es nicht leer ist, prüfen Sie, ob es eine Formel enthält.
Wenn keine Formel vorhanden ist, finden Sie heraus, ob sie einen numerischen Wert oder Text enthält.
Wenn die Routine endet, enthält die Variable Msg eine Zeichenfolge, die den Inhalt der Zelle beschreibt. Die MsgBox-Funktion zeigt diese Nachricht an.

Eine Nachricht, die von der CheckCell-Prozedur angezeigt wird.
Sie können Select Case-Strukturen beliebig tief verschachteln, aber stellen Sie sicher, dass jede Select Case-Anweisung eine entsprechende End Select-Anweisung hat.
Wenn Sie immer noch nicht davon überzeugt sind, dass sich das Einrücken von Code lohnt, dient die vorherige Auflistung als gutes Beispiel. Die Einrückungen machen die Verschachtelungsebenen wirklich deutlich. Sehen Sie sich das gleiche Verfahren ohne Einrückung an:
Unter CheckCell()
Dim Msg As String
Wählen Sie Fall ist leer (ActiveCell)
Fall wahr
Msg = "ist leer."
Fall sonst
Wählen Sie Case ActiveCell.HasFormula
Fall wahr
Msg = „hat eine Formel“
Fall sonst
Wählen Sie Case IsNumeric(ActiveCell)
Fall wahr
Msg = „hat eine Nummer“
Fall sonst
Msg = „hat Text“
Auswahl beenden
Auswahl beenden
Auswahl beenden
MsgBox „Cell“ & ActiveCell.Address & „“ & Msg
End Sub
Ziemlich unverständlich, oder?