VBA Select Case-Anweisung

In VBA ist die Fallaussage auswählen ist eine Alternative zu den Wenn-Dann-Anweisung, sodass Sie testen können, ob die Bedingungen erfüllt sind, indem Sie für jede Bedingung spezifischen Code ausführen. Die Select-Anweisung ist der If-Anweisung vorzuziehen, wenn mehrere Bedingungen zu verarbeiten sind.

Fallbeispiel auswählen

Dieses Beispiel fordert den Benutzer mit einer YesNoCancel MessageBox auf und testet, welche Option der Benutzer ausgewählt hat:

1234567891011121314 Unter Select_Case_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("…", vbYesNoCancel)Fall auswählen nErgebnisFall vbJaMsgBox "Ja"Fall vbNrMsgBox "Nein"Fall vbAbbrechenMsgBox "Abbrechen"Auswahl beendenEnd Sub

Unten haben wir das Äquivalent stattdessen mit einer If-Anweisung geschrieben. Sie werden feststellen, dass die Case Select-Anweisung etwas weniger Tipparbeit erfordert – dieser Vorteil wird verstärkt, wenn Sie mehrere Kriterien testen.

12345678910111213 Sub If_Yes_No_Cancel()Dim nResult As VbMsgBoxResultnResult = MsgBox("…", vbYesNoCancel)Wenn nErgebnis = vbJa DannMsgBox "Ja"ElseIf nResult = vbNo ThenMsgBox "Nein"ElseIf nResult = vbCancel ThenMsgBox "Abbrechen"Ende WennEnd Sub

Syntax der Case-Anweisung

Die Syntax der Select Case-Anweisung lautet wie folgt:

12345678910 Fall auswählen [Ausdruck testen]Fall [Bedingung 1][Aktion, wenn Bedingung 1 wahr ist]Fall [Bedingung 2][Aktion, wenn Bedingung 2 wahr ist]Fall [Bedingung n][Aktion, wenn Bedingung n wahr ist]Fall sonst[Aktion, wenn keine zutrifft]Auswahl beenden

Woher:

[Ausdruck testen] - Ist der zu bewertende Wert. Normalerweise ist dies eine Variable.

[Aktion, wenn Bedingung n wahr ist] - Ist nur der Code, der ausgeführt werden soll, wenn die Bedingung erfüllt ist (genau wie bei einer If-Anweisung)

[Bedingung n] - Ist die Bedingung zu testen. Es gibt viele verschiedene Möglichkeiten, Bedingungen zu testen. Wir werden sie im Folgenden besprechen.

Die Case-Anweisung führt den Code für die ERSTE Bedingung aus, die als WAHR erkannt wird. Wenn keine Bedingung erfüllt ist, wird kein Code ausgeführt, es sei denn, die Else-Klausel wird hinzugefügt.

Fallkriterien auswählen

Mit Select Cases können sowohl numerische Werte als auch Text ausgewertet werden. Zuerst besprechen wir, wie man Select Cases verwendet, um numerische Ausdrücke auszuwerten.

Genaue Übereinstimmung - Zahlen

Mit einer Case-Anweisung können Sie ganz einfach auf eine genaue Übereinstimmung testen:

1 Fall 10

oder fügen Sie Kommas hinzu, um auf genaue Übereinstimmungen mit mehreren Zahlen zu testen:

1 Fall 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers()Dim n As Integern = CInt(InputBox("…"))Wählen Sie Fall NrFall 10' Wenn n 10 ist, dannFall 20, 30, 40' Wenn n 20/30/40 ist, dannFall sonst' Wenn n nicht 10/20/30/40 ist, dannAuswahl beendenEnd Sub

Bereiche

Sie können testen, ob eine Zahl in einen Bereich wie folgt fällt:

1 Fall 55 bis 74

Dieses Verfahren generiert eine Buchstabenpunktzahl für einen Schüler basierend auf seiner numerischen Punktzahl:

12345678910111213141516171819202122 Unter Calc_Grade()Dim-Score als IntegerDim LetterGrade As StringPunktzahl = InputBox("Schülerpunktzahl eingeben")Fallbewertung auswählenFall 90 bis 100LetterGrade = "A"Gehäuse 80 bis 90LetterGrade = "B"Gehäuse 70 bis 80LetterGrade = "C"Gehäuse 60 bis 70LetterGrade = "D"Fall sonstLetterGrade = "F"Auswahl beendenMsgBox "Die Note des Schülers ist: " & LetterGradeEnd Sub

Sie können auch Reichweiten mit dem Case Is . testen

Wählen Sie Fall ist

1234 Gehäuse ist < 55'Nichts tunFall <= 74MsgBox "In Reichweite"

Denken Sie daran, dass die Case-Anweisung nur Code für NUR die erste Übereinstimmung ausführt.

Bei diesem Verfahren wird die Note eines Schülers anhand von Fall ist anstelle von Fall bis berechnet.

12345678910111213141516171819202122 Unter Select_Case_Is_Grade()Dim-Score als IntegerDim LetterGrade As StringPunktzahl = InputBox("Schülerpunktzahl eingeben")Fallbewertung auswählenFall ist >= 90LetterGrade = "A"Fall ist >= 80LetterGrade = "B"Fall ist >= 70LetterGrade = "C"Fall ist >= 60LetterGrade = "D"Fall sonstLetterGrade = "F"Auswahl beendenMsgBox "Die Note des Schülers ist: " & LetterGradeEnd Sub

Fall sonst

Sie können „Fall sonst“ am Ende Ihrer Fallerklärung hinzufügen, um etwas zu tun, wenn keine Bedingungen erfüllt sind:

1 Fall sonst

Am Ende des vorherigen Codebeispiels erfahren Sie, wie Case Else verwendet werden kann.

Groß-/Kleinschreibung auswählen - Text & der Like-Operator

Bisher haben unsere Select Case-Beispiele nur mit Zahlen gearbeitet. Sie können Select Case-Anweisungen auch mit Text verwenden.

Genaue Übereinstimmung - Text

Sie können testen, ob der Ausdruck mit einem genauen Ausdruck wie diesem übereinstimmt:

1 Fall "Rüben"

Oder verwenden Sie Kommas, um zu testen, ob der Ausdruck genau mit mehr als einem Ausdruck übereinstimmt:

1 Etui "Apfel", "Banane", "Orange"

Zusammensetzen sieht so aus:

12345678910 Sub ExactMatch_Food()Select Case Range("a1").ValueFall "Rüben"MsgBox "Gemüse"Etui "Apfel", "Banane", "Orange"MsgBox "Frucht"Auswahl beendenEnd Sub

Groß-und Kleinschreibung

Standardmäßig ist VBA Groß- und Kleinschreibung beachten. Das bedeutet, dass VBA „Text“ anders als „Text“ betrachtet. Um die Groß-/Kleinschreibung zu deaktivieren, fügen Sie oben in Ihrem Modul die Option Text vergleichen hinzu:

1 Option Text vergleichen

In diesem Beispiel wird die Groß-/Kleinschreibung bei der Arbeit mit Text nicht beachtet:

123456789101112 Option Text vergleichenSub ExactMatch_Food()Select Case Range("a1").ValueFall "Rüben"MsgBox "Gemüse"Etui "Apfel", "Banane", "Orange"MsgBox "Frucht"Auswahl beendenEnd Sub

Fall wie

Mit dem Like-Operator können Sie ungenaue Vergleiche anstellen. Wenn der Text übereinstimmt, gibt Like TRUE zurück, wenn er nicht übereinstimmt, wird FALSE zurückgegeben. Dies macht den Like-Operator einfach mit If-Anweisungen zu verwenden, funktioniert jedoch nicht so einfach mit Case-Anweisungen.

Fallbeispiel - Ein fehlgeschlagener Test

Der folgende Code zeigt, dass der Like-Operator nicht mit Select Case funktioniert:

1234567891011 Unter Select_Case_Like_DoesnotWork()Wort als String dimmenWort = "KAKAO"Groß-/Kleinschreibung auswählenFallwort2 wie "*C*C*"MsgBox "Gut"Fall sonstMsgBox "Nicht gut"Auswahl beendenEnd Sub

Fallbeispiel - Der richtige Weg

Wir können jedoch den TRUE-Ausdruck hinzufügen, damit die Select-Anweisung mit dem Like-Operator funktioniert:

1234567891011 Sub Select_Case_Like_CorrectWay()Wort als String dimmenWort = "KAKAO"Groß-/Kleinschreibung auswählenFallwort wie "*C*C*"MsgBox "Gut"Fall sonstMsgBox "Nicht gut"Auswahl beendenEnd Sub

Fall - Doppelpunkt

Wenn Sie eine Case-Anweisung verwenden, können Sie so viele Codezeilen hinzufügen, wie Sie mit jeder Bedingung ausführen möchten. Wenn Sie jedoch nur eine Codezeile ausführen müssen. Sie können einen Doppelpunkt ( : ) verwenden, um alles in dieselbe Zeile zu schreiben.

Hier ist das gleiche Beispiel für die Schülernote wie zuvor, außer dass ein Doppelpunkt verwendet wird, um den Code zu kürzen:

1234567891011121314151617 Unter Calc_Grade_colon()Dim-Score als IntegerDim LetterGrade As StringPunktzahl = InputBox("Schülerpunktzahl eingeben")Fallbewertung auswählenFall 90 bis 100: LetterGrade = "A"Fall 80 bis 90: LetterGrade = "B"Fall 70 bis 80: LetterGrade = "C"Fall 60 bis 70: LetterGrade = "D"Fall sonst: LetterGrade = "F"Auswahl beendenMsgBox "Die Note des Schülers ist: " & LetterGradeEnd Sub

Fallauswahl - Und / Oder - Mehrere Bedingungen

Sie können die Und/Oder-Operatoren verwenden, um zusammen mit dem Auswahlfall zusätzliche Kriterien zu testen.

In diesem Beispiel verwenden wir einen Select Case für die Variable ‚Alter‘, möchten aber auch das Geschlecht testen. Daher verwenden wir den And-Operator, um den komplexeren Test durchzuführen:

123456789101112131415161718 Unter NestedSelectCase()Schwacher Sex als StringDim-Alter As Integersex = "männlich" ' oder weiblichAlter = 15Fallalter auswählenFall ist < 20 und Geschlecht = "männlich"Msgbox "Männlich unter 20"Fall ist < 20 und Geschlecht = "weiblich"Msgbox "Frauen unter 20"Fall ist >= 20 und Geschlecht = "männlich"Msgbox "Männlich über 20"Fall ist >= 20 und Geschlecht = "weiblich"Msgbox "Frauen über 20"Auswahl beendenEnd Sub

Verschachtelte Fallanweisungen

Genau wie If-Anweisungen können Sie Case-Anweisungen ineinander verschachteln:

123456789101112131415161718192021222324 Unter NestedSelectCase()Schwacher Sex als StringDim-Alter As Integersex = "männlich" ' oder weiblichAlter = 15Fallalter auswählenFall ist < 20Fallgeschlecht auswählenFall "männlich"MsgBox "Männlich unter 20"Fall "weiblich"MsgBox "Frauen unter 20"Auswahl beendenFall ist >= 20 und Geschlecht = "weiblich"Fallgeschlecht auswählenFall "männlich"MsgBox "Männlich über 20"Fall "weiblich"MsgBox "Frauen über 20"Auswahl beendenAuswahl beendenEnd Sub

Case-Statement vs. If-Statement

Je mehr Bedingungen getestet werden müssen, desto nützlicher ist die Case-Anweisung im Vergleich zu einer If-Anweisung. Schauen wir uns ein Beispiel an.

Hier ist der Code, der erforderlich ist, um mithilfe einer If-Anweisung zu testen, ob ein Arbeitsblattname einer Reihe von Werten entspricht:

12345 Wenn Name = "Budget" Oder Name = "Prognose" Oder Name = "Trailing12" Oder _Name = "Flex" Oder Name = "OtherRatios" Oder Name = "Vergleich" Oder _Name = "BudReview" Oder Name = "P&L_Review" Oder Name = "Other" Then'Etwas tunEnde Wenn

Hier ist derselbe Code, der stattdessen eine Select-Anweisung verwendet:

12345 Fallname auswählenFall "Budget", "Prognose", "Trailing12", "Flex", "OtherRatios", _"Vergleich", "BudReview", "P&L_Review", "Other"'Etwas tunAuswahl beenden

Sie sehen, dass es in diesem Szenario viel einfacher ist, eine Select-Anweisung zu verwenden. Es ist deutlich weniger Tippen und es ist viel einfacher zu lesen.

VBA Select-Fallbeispiele

Bsp. 1. Benutzerdefinierte Funktion (UDF) für die Fallaussage

Lassen Sie uns unser obiges Beispiel für die Notenberechnung replizieren und eine UDF erstellen, um die Punktzahl eines Schülers zu berechnen:

12345678910111213141516 Funktion GetGrade(Score As Integer) As StringFallbewertung auswählenFall 90 bis 100GetGrade = "A"Gehäuse 80 bis 90GetGrade = "B"Gehäuse 70 bis 80GetGrade = "C"Gehäuse 60 bis 70GetGrade = "D"Fall sonstGetGrade = "F"Auswahl beendenEndfunktion

Jetzt können wir die Funktion GetGrade in unserem Excel-Arbeitsblatt verwenden, um schnell Schülernoten zu berechnen:

Bsp. 2. Testblattname / Schleifenfall-Anweisung

Dieser Code durchläuft alle Arbeitsblätter in einer Arbeitsmappe, UnProtecting-Blätter, die bestimmte Kriterien erfüllen:

123456789101112 Unter Case_UnProtectSheet()Dim ws als ArbeitsblattFür jedes ws in ArbeitsblätternWählen Sie Fall ws.Name 'Liste aller Blätter mit VerhältnissenFall "Budget", "Prognose", "Trailing12", "Flex", "OtherRatios", _"Vergleich", "BudReview", "P&L_Review", "Other"ws.Schutz aufhebenAuswahl beendenNächstes wsEnd Sub

Bsp. 3. Fall auswählen - Zellenwert

In diesem Beispiel wird die Punktzahl eines Schülers in einer Zelle getestet und die Buchstabennote direkt in die Zelle rechts ausgegeben.

12345678910111213141516 Unter TestCellValue()Zelle als Bereich dimmenZelle setzen = Range("C1")Wählen Sie Case cell.ValueFall 90 bis 100cell.Offset(0, 1) = "A"Gehäuse 80 bis 90cell.Offset(0, 1) = "B"Gehäuse 70 bis 80cell.Offset(0, 1) = "C"Gehäuse 60 bis 80cell.Offset(0, 1) = "D"Auswahl beendenEnd Sub

Bsp. 4. Fall auswählen – Daten

Dieses Case Select-Beispiel ist eine Funktion, die testet, in welches Quartal ein Datum fällt.

123456789101112131415161718 Untertestdatum ()MsgBox GetQuarter(CDate("20.07.2019"))End SubFunktion GetQuarter(dt As Date) As IntegerDim sht als ArbeitsblattWählen Sie Fall dtFall CDate("01.01.2019) An CDate("31.03.2019)GetQuarter = 1Fall CDate("04/01/2019") An CDate("06/30/2019")GetQuarter = 2Fall CDate("07/01/2019") An CDate("09/30/2019")GetQuarter = 3Fall CDate("10.01.2019) An CDate("31.12.2019")GetQuarter = 4Auswahl beendenEndfunktion

Da es sich um eine Funktion handelt, können Sie sie als Funktion in Excel verwenden:

Ex. 5 Prüfen Sie, ob Zahl ungerade oder gerade ist

In diesem Beispiel wird getestet, ob eine Zahl ungerade oder gerade ist.

123456789101112 Unter CheckOddEven()Dim n As Integern = InputBox("Geben Sie eine Zahl ein")Wählen Sie Fall n Mod 2Fall 0MsgBox "Die Zahl ist gerade."Fall 1MsgBox "Die Zahl ist ungerade."Auswahl beendenEnd Sub

Ex. 6 Testen Sie, ob das Datum am Wochentag oder am Wochenende liegt

Diese Beispiele testen, ob ein Datum auf einen Wochentag oder ein Wochenende fällt.

123456789101112131415161718192021 Unter CheckWeekDay()Dim dt als Datumdt = CDate("1.1.2020")Fall auswählen Wochentag(dt)Fall vbMondayMsgBox "Es ist Montag"Fall vbTuesdayMsgBox "Es ist Dienstag"Fall vbMittwochMsgBox "Es ist Mittwoch"Fall vbDonnerstagMsgBox "Es ist Donnerstag"Fall vbFreitagMsgBox "Es ist Freitag"Fall vbSamstagMsgBox "Es ist Samstag"Fall vbSonntagMsgBox "Es ist Sonntag"Auswahl beendenEnd Sub
123456789101112 Unter CheckWeekend()Dim dt als Datumdt = CDate("1.1.2020")Fall auswählen Wochentag(dt)Fall vbSamstag, vbSonntagMsgBox "Es ist ein Wochenende"Fall sonstMsgBox "Es ist kein Wochenende"Auswahl beendenEnd Sub

VBA Select Case in Access

Alle oben genannten Beispiele funktionieren in Access VBA genauso wie in Excel VBA.

123456789101112131415161718192021 Unter TestCellValue()Dim dbs als DatenbankZuerst als RecordSet dimmenSetze dbs = CurrentDBSet rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)Mit rst.Zuerst verschieben.BearbeitenWählen Sie Fall rst.Fields("Stadt")Fall "Austin".rst.Fields("TelCode") = "512"Fall "Chicago".rst.Fields("TelCode") = "312"Fall "New York".rst.Fields("TelCode") = "1212"Koffer "San Francisco".rst.Fields("TelCode") = "415"Auswahl beenden.AktualisierenEnde mitEnde Sus
wave wave wave wave wave