- Fallbeispiel auswählen
- Syntax der Case-Anweisung
- Fallkriterien auswählen
- Groß-/Kleinschreibung auswählen - Text & der Like-Operator
- Fall - Doppelpunkt
- Fallauswahl - Und / Oder - Mehrere Bedingungen
- Verschachtelte Fallanweisungen
- Case-Statement vs. If-Statement
- VBA Select-Fallbeispiele
- VBA Select Case in Access
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 |