VBA – Select Case-Anweisung
In this Article
In VBA ist die Select Case-Anweisung eine Alternative zur Anweisung If-Then-Anweisung und ermöglicht es Ihnen, zu prüfen, ob Bedingungen erfüllt sind, wobei für jede Bedingung ein spezifischer Code ausgeführt wird. Die Select-Anweisung ist der If-Anweisung vorzuziehen, wenn es mehrere Bedingungen zu verarbeiten gibt.
Select Case-Beispiel
Dieses Beispiel fordert eine Wahl vom Benutzer mit einer YesNoCancel-Meldungsbox auf und prüft, welche Option der Benutzer ausgewählt hat:
Sub Select_Case_Ja_Nein_Abbrechen()
Dim nErgebnis As VbMsgBoxResult
nErgebnis = MsgBox("...", vbYesNoCancel)
Select Case nErgebnis
Case vbYes
MsgBox "Yes"
Case vbNo
MsgBox "No"
Case vbCancel
MsgBox "Cancel"
End Select
End Sub
Unten haben wir das Äquivalent mit einer If-Anweisung ausgedrückt. Sie werden feststellen, dass die Case Select-Anweisung etwas weniger Tipparbeit erfordert. Dieser Vorteil wird noch größer, wenn mehrere Kriterien geprüft werden.
Sub If_Ja_Nein_Abbrechen()
Dim nErgebnis As VbMsgBoxResult
nErgebnis = MsgBox("...", vbYesNoCancel)
If nErgebnis = vbYes Then
MsgBox "Yes"
ElseIf nErgebnis = vbNo Then
MsgBox "No"
ElseIf nErgebnis = vbCancel Then
MsgBox "Cancel"
End If
End Sub
Syntax der Case-Anweisung
Die Syntax der Select Case-Anweisung lautet folgendermaßen:
Select Case [Testausdruck]
Case [Bedingung 1]
[Aktion, wenn Bedingung 1 wahr ist]
Case [Bedingung 2]
[Aktion, wenn Bedingung 2 wahr ist]
Case [Bedingung n]
[Aktion, wenn Bedingung n wahr ist]
Case Else
[Aktion, wenn keine wahr ist]
End Select
Wobei:
[Testausdruck] – 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 zu prüfende Bedingung. Es gibt viele verschiedene Möglichkeiten, Bedingungen zu prüfen. Wir werden sie weiter unten behandeln. 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.
Select Case-Kriterien
Select-Case-Anweisungen können sowohl zur Auswertung von Zahlenwerten als auch von Text verwendet werden. Zunächst wird erörtert, wie diese verwendet werden, um numerische Ausdrücke auszuwerten.
Exakte Übereinstimmung – Zahlen
Mit einer Case-Anweisung können Sie leicht auf eine exakte Übereinstimmung testen:
Case 10
oder fügen Sie Kommas hinzu, um nach exakten Übereinstimmungen mit mehreren Zahlen zu suchen:
Case 20, 30, 40
Sub ZahlenTreffer_Extrahieren()
Dim n As Integer
n = CInt(InputBox("..."))
Select Case n
Case 10
' Wenn n gleich 10 ist, dann
Case 20, 30, 40
' Wenn n gleich 20/30/40 ist, dann
Case Else
' Wenn n nicht gleich 10/20/30/40 ist dann
End Select
End Sub
Bereiche
Sie können prüfen, ob eine Zahl in einen Bereich fällt. So z. B.:
Case 55 To 74
Diese Prozedur generiert eine Buchstabenbewertung für einen Schüler basierend auf seiner numerischen Bewertung:
Sub SchulNote_Bestimmen()
Dim Punktzahl As Integer
Dim BuchstabenNote As String
Punktzahl = InputBox("Die Punktzahl des Schülers eingeben")
Select Case Punktzahl
Case 90 To 100
BuchstabenNote = "A"
Case 80 To 90
BuchstabenNote = "B"
Case 70 To 80
BuchstabenNote = "C"
Case 60 To 70
BuchstabenNote = "D"
Case Else
BuchstabenNote = "F"
End Select
MsgBox "Die Note des Schülers ist: " & BuchstabenNote
End Sub
Sie können auch Bereiche mit Case Is prüfen.
Select Case Is
Case Is < 55
'Nichts tun
Case <= 74
MsgBox "Im Bereich"
Denken Sie daran, dass die Case-Anweisung nur den Code für die erste Übereinstimmung ausführt.
Diese Prozedur berechnet die Note eines Schülers unter Verwendung der Case Is-Anweisung anstelle von Case To.
Sub Select_Case_Is_SchulNote()
Dim Punktzahl As Integer
Dim BuchstabenNote As String
Punktzahl = InputBox("Punktzahl des Schülers eingeben")
Select Case Punktzahl
Case Is >= 90
BuchstabenNote = "A"
Case Is >= 80
BuchstabenNote = "B"
Case Is >= 70
BuchstabenNote = "C"
Case Is >= 60
BuchstabenNotee = "D"
Case Else
BuchstabenNote = "F"
End Select
MsgBox "Die Note des Schülers ist: " & BuchstabenNote
End Sub
Case Else
Sie können „Case Else“ an das Ende Ihrer Case-Anweisung anfügen, um etwas zu tun, wenn keine Bedingungen erfüllt sind:
Case Else
Am Ende des vorherigen Codebeispiels sehen Sie, wie Case Else verwendet werden kann.
Select Case (Text und der Like-Operator)
Bislang haben unsere Select Case-Beispiele nur mit Zahlen funktioniert. Sie können Select Case-Anweisungen auch mit Text verwenden.
Exakte Übereinstimmung (Text)
Sie können prüfen, ob der Ausdruck mit einer exakten Phrase übereinstimmt. So z. B.:
Case "Rote Bete"
Sie können auch Kommas verwenden, um zu prüfen, ob der Ausdruck genau mit mehr als einem Ausdruck übereinstimmt:
Case "Apfel", "Banane", "Orange"
Zusammengesetzt sieht das folgendermaßen aus:
Sub TrefferExtrahieren_Essen()
Select Case Range("a1").Value
Case "Rote Bete"
MsgBox "Gemüse"
Case "Apfel", "Banane", "Orange"
MsgBox "Obst"
End Select
End Sub
Groß- und Kleinschreibung
Standardmäßig achtet VBA auf Groß- und Kleinschreibung (Engl. Case Sensitive). Das bedeutet, dass VBA „Text“ als etwas anderes betrachtet als „text“. Um die Groß- und Kleinschreibung auszuschalten, fügen Sie Option Compare Text oben in Ihrem Modul hinzu:
Option Compare Text
In diesem Beispiel wird die Groß- und Kleinschreibung bei der Arbeit mit Text nicht berücksichtigt:
Option Compare Text
Sub TrefferExtrahieren_Essen()
Select Case Range("a1").Value
Case "Rote Bete"
MsgBox "Gemüse"
Case "Apfel", "Banane", "Orange"
MsgBox "Obst"
End Select
End Sub
Case Like
Mit dem Like-Operator können Sie ungenaue Vergleiche durchführen. Wenn der Text übereinstimmt, gibt Like TRUE zurück. Wenn er nicht übereinstimmt, wird FALSE zurückgegeben. Dadurch lässt sich der Like-Operator leicht mit der If-Anweisungen verwenden, aber er funktioniert nicht so leicht mit der Case-Anweisungen.
Case Like (Ein fehlgeschlagener Test)
Der folgende Code zeigt, dass der Like-Operator nicht mit Select Case funktioniert:
Sub Select_Case_Like_Fehlschlag()
Dim Wort As String
Wort = "COCOA"
Select Case Wort
Case Wort Like "*C*C*"
MsgBox "Gut"
Case Else
MsgBox "Nicht gut"
End Select
End Sub
Case Like (Der korrekte Weg)
Wir können jedoch den Ausdruck TRUE hinzufügen, damit die Select-Anweisung mit dem Like-Operator funktioniert:
Sub Select_Case_Like_RichtigerWeg()
Dim Wort As String
Wort = "Kakao"
Select Case True
Case Wort Like "*C*C*"
MsgBox "Gut"
Case Else
MsgBox "Nicht gut"
End Select
End Sub
Case – Doppelpunkt
Wenn Sie eine Case-Anweisung verwenden, können Sie so viele Codezeilen hinzufügen, wie Sie für jede Bedingung ausführen möchten. Wenn Sie jedoch nur eine Codezeile ausführen müssen, können Sie einen Doppelpunkt ( : ) verwenden, um Alles in dieselbe Zeile zu schreiben.
Hier ist das gleiche Beispiel für die Schülerbewertung wie vorher. Es ist nur, dass Sie einen Doppelpunkt verwenden, um den Code zu verkürzen:
Sub Note_Bestimmen_Doppelpunkt()
Dim Punktzahl As Integer
Dim BuchstabenNote As String
Punktzahl = InputBox("Punktzahl des Schülers eingeben")
Select Case Punktzahl
Case 90 To 100: BuchstabenNote = "A"
Case 80 To 90: BuchstabenNote = "B
Case 70 To 80: BuchstabenNote = "C"
Case 60 To 70: BuchstabenNote = "D"
Case Else: BuchstabenNote = "F"
End Select
MsgBox "Die Note des Schülers ist: " & BuchstabenNote
End Sub
Case Select – And / Or (Mehrere Bedingungen)
Sie können die Operatoren And / Or verwenden, um zusätzliche Kriterien zusammen mit dem Select Case zu prüfen.
In diesem Beispiel verwenden wir Select Case für die Variable ‚alter‘, wollen aber auch das Geschlecht prüfen. Daher verwenden wir den And-Operator, um die komplexere Prüfung durchzuführen:
Sub SelectCase_MehrereBedingungen()
Dim geschlecht As String
Dim alter As Integer
geschlecht = "männlich" ' oder weiblich
alter = 15
Select Case alter
Case Is < 20 And geschlecht = "männlich"
Msgbox "Männlich unter 20"
Case Is < 20 And geschlecht = "weiblich"
Msgbox "Weiblich unter 20"
Case Is >= 20 And geschlecht = "männlich"
Msgbox "Männlich über 20"
Case Is >= 20 And geschlecht = "weiblich"
Msgbox "Weiblich über 20"
End Select
End Sub
Verschachtelte Case-Anweisungen
Genau wie If-Anweisungen können Sie Case-Anweisungen ineinander verschachteln:
Sub SelectCase_Verschachtelt()
Dim geschlecht As String
Dim alter As Integer
geschlecht = "männlich" ' oder weiblich
alter = 15
Select Case alter
Case Is < 20
Select Case geschlecht
Case "männlich"
MsgBox "Männlich unter 20"
Case "weiblich"
MsgBox "Weiblich unter 20"
End Select
Case Is >= 20 And geschlecht = "weiblich"
Select Case geschlecht
Case "männlich"
MsgBox "Männlich über 20"
Case "weiblich"
MsgBox "Weiblich über 20"
End Select
End Select
End Sub
Case-Anweisung vs. If-Anweisung
Je mehr Bedingungen zu prüfen sind, 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 mit einer If-Anweisung zu prüfen, ob ein Arbeitsblattname einer Reihe von Werten entspricht:
If Name = "Budget" Or Name = "Forecast" Or Name = "Trailing12" Or _
Name = "Flex" Or Name = "OtherRatios" Or Name = "Comparison" Or _
Name = "BudReview" Or Name = "P&L_Review" Or Name = "Sonstiges" Then
'Etwas tun
End If
Hier ist derselbe Code, der stattdessen eine Select-Anweisung verwendet:
Select Case Name
Case "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _
"Vergleich", "BudReview", "P&L_Review", "Other"
'Etwas tun
End Select
Wie Sie sehen, ist es viel einfacher, in diesem Szenario eine Select-Anweisung zu verwenden. Sie brauchen wesentlich weniger zu tippen und es ist viel einfacher zu lesen.
VBA Select Case Beispiele
Bsp. 1 – Case-Anweisung in benutzerdefinierter Funktion (UDF)
Wiederholen wir unser obiges Beispiel für die Notenberechnung und erstellen wir eine benutzerdefinierte Funktion, um die Note eines Schülers zu berechnen:
Function GetGrade(Punktzahl As Integer) As String
Select Case Punktzahl
Case 90 To 100
GetGrade = "A"
Case 80 To 90
GetGrade = "B"
Case 70 To 80
GetGrade = "C"
Case 60 To 70
GetGrade = "D"
Case Else
GetGrade = "F"
End Select
End Function
Jetzt können wir die Funktion GetGrade in unserem Excel-Arbeitsblatt verwenden, um die Noten der Schüler schnell zu berechnen:
Bsp. 2. Blattnamen prüfen / Loop Case-Anweisung
Dieser Code durchläuft in einer Schleife alle Arbeitsblätter in einer Arbeitsmappe und hebt den Schutz der Blätter auf, die bestimmte Kriterien erfüllen:
Sub Case_BlattschutzAufheben()
Dim ws As Worksheet
For Each ws In Worksheets
Select Case ws.Name 'Liste aller Blätter mit Kennziffern
Case "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _
"Vergleich", "BudReview", "P&L_Review", "Sonstiges"
ws.Unprotect
End Select
Next ws
End Sub
Bsp. 3 – Select Case (Zellenwert)
In diesem Beispiel wird die Punktzahl eines Schülers in einer Zelle geprüft, wobei die Buchstabennote direkt in die Zelle rechts daneben ausgegeben wird.
Sub ZellenWertPruefen()
Dim Zelle As Range
Set Zelle = Range("C1")
Select Case Zelle.Value
Case 90 To 100
Zelle.Offset(0, 1) = "A"
Case 80 To 90
Zelle.Offset(0, 1) = "B"
Case 70 To 80
Zelle.Offset(0, 1) = "C"
Case 60 To 80
Zelle.Offset(0, 1) = "D"
End Select
End Sub
Bsp. 4 – Select Case (Datum)
Dieses Case Select-Beispiel ist eine Funktion, die prüft, in welches Quartal ein Datum fällt.
Sub DatumPruefen()
MsgBox GetQuarter(CDate("20.7.2019"))
End Sub
Function GetQuarter(datum As Date) As Integer
Dim blatt As Worksheet
Select Case datum
Case CDate("01/01/2019") To CDate("03/31/2019")
GetQuarter = 1
Case CDate("04/01/2019") To CDate("06/30/2019")
GetQuarter = 2
Case CDate("07/01/2019") To CDate("09/30/2019")
GetQuarter = 3
Case CDate("10/01/2019") To CDate("12/31/2019")
GetQuarter = 4
End Select
End Function
Da es sich um eine Funktion handelt, können Sie sie als Funktion in Excel verwenden:
Bsp. 5 – Prüfen, ob eine Zahl gerade oder ungerade ist
In diesem Beispiel wird geprüft, ob eine Zahl ungerade oder gerade ist.
Sub GeradeUngeradePruefen()
Dim n As Integer
n = InputBox("Geben Sie eine Zahl ein")
Select Case n Mod 2
Case 0
MsgBox "Die Zahl ist gerade."
Case 1
MsgBox "Die Zahl ist ungerade."
End Select
End Sub
Bsp. 6 – Prüfen, ob das Datum auf einen Wochentag oder ein Wochenende fällt
Mit diesen Beispielen wird geprüft, ob ein Datum auf einen Wochentag oder ein Wochenende fällt.
Sub WochentagPruefen()
Dim datum As Date
datum = CDate("1/1/2020")
Select Case Weekday(datum)
Case vbMonday
MsgBox "Es ist Montag"
Case vbTuesday
MsgBox "Es ist Dienstag"
Case vbWednesday
MsgBox "Es ist Mittwoch"
Case vbThursday
MsgBox "Es ist Donnerstag"
Case vbFriday
MsgBox "Es ist Freitag"
Case vbSaturday
MsgBox "Heute ist Samstag"
Case vbSunday
MsgBox "Es ist Sonntag"
End Select
End Sub
Sub WochenendePruefen()
Dim datum As Date
datum = CDate("1/1/2020")
Select Case Weekday(dt)
Case vbSaturday, vbSunday
MsgBox "Es ist ein Wochenende"
Case Else
MsgBox "Es ist kein Wochenende"
End Select
End Sub
VBA Select Case in Access
Alle oben genannten Beispiele funktionieren in Access-VBA genau so wie in Excel-VBA.
Sub ZellenwertPruefen()
Dim dbs as Database
Dim rst as RecordSet
Set dbs = CurrentDB
Set rst = dbs.OpenRecordset("tblKunden", dbOpenDynaset)
With rst
.MoveFirst
.Edit
Select Case rst.Fields("Stadt")
Case "Austin"
.rst.Fields("Vorwahl") = "512"
Case "Chicago"
.rst.Fields("Vorwahl") = "312"
Case "New YorK"
.rst.Fields("Vorwahl") = "1212"
Case "San Fransisco"
.rst.Fields("Vorwahl") = "415"
End Select
.Update
End With
End Sub