Rückkehr in VBA-Code-Beispiele

VBA – Select Case-Anweisung

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

select case beispiel 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:

vba case select anwendung

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:

case select datum beispiel

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