RSS

Select Case i Excel VBA

Den mest almindelige måde at teste betingelser på i Excel VBA er at bruge If-Then konstruktioner. Hvis man har flere betingelser, som skal testes, er det dog ofte bedre og mere overskueligt at bruge Select Case end en stribe "ElseIf".

Select Case har en enkel liste-agtig syntaks. For eksempel:

Sub TestSelectCase()

Select Case Range("A1").Value
    Case Is >= 1000
        Range("B1").Value = "For dyrt"
    Case Is >= 2000
        Range("B1").Value = "Anmeld for åger!"
    Case Else
        Range("B1").Value = "Acceptabelt"
End Select

End Sub

Det er der jo ingen ben i: Man skriver Select Case efterfulgt af det udtryk, man vil teste, og for hver betingelse laver man en "Case" med tilhørende handling. Det sidste punkt, "Case Else", svarer helt til "Else" i If-Then konstruktionen.

Select Case er meget fleksibel. For eksempel kan man skrive:


Sub TestSelectCase()

Select Case Range("A1").Value
    Case 100, 150, 155 To 200, 220 To 300, 350, "slagtilbud"
        Range("B1").Value = 200
    Case 301 To 349
        Range("B1").Value = 275
    Case Else
        Range("B1").Value = 0
End Select

End Sub

Celle B2 får værdien 200, hvis A1 har værdien 100, 150, 350, "slagtilbud", 155 til 200 eller 220 til 300. Hvis A1 er 301 til 349, får B1 værdien 275, og ved alle andre A1-værdier sættes B1 til nul.

Select Case kan også alfabetet

Man kan også bruge Select Case til alfabetiske tests. For eksempel:


Select Case Range("A1").Value
    Case "a" To "f"
        Range("B1").Value = "A til F"
    Case "g" To "n"
        Range("B1").Value = "G til N"
    Case Else
        Range("B1").Value = "Ikke mellem A og N"
End Select

Hvis der f.eks. står "hanhund" i celle A1, vil celle B1 få værdien "G til N", og hvis der står "zebra", vil B1 få værdien "Ikke mellem A og N".

Her skal man dog lige være opmærksom på, at Excel VBA som standard skelner mellem store og små bogstaver. Hvis man f.eks. skriver "Hanhund" i celle A1 i stedet for "hanhund", vil der komme til at stå "Ikke mellem A og N" i celle B1.

Dette kan man ændre ved at skrive "Option Compare Text" øverst i modulet - så vil alle procedurer og funktioner i det pågældende modul IKKE skelne mellem store og små bogstaver. Modstykket hertil er "Option Compare Binary", som altså vil gennemtvinge binær sammenligning.

Indlejring

Som med If-Then kan man "indlejre" flere Select Case eller If-Then konstruktioner. For eksempel:


Sub TestSelectCase()

Select Case Range("A1").Value
    Case 1
        'Her indlejrer vi en ny Select Case
        Select Case Range("B1")
            Case 2
                Range("C1").Value = 3
            Case Else
                MsgBox "Det står ikke 2 i celle B1"
        End Select
    Case 2
        'Og her indfletter vi en If-Then test
        If Range("B1").Value = 2 Then
            Range("C1").Value = 4
        End If
    Case Else
        'Aktion
End Select

End Sub

Hastighed

Hvis man skal teste rigtig mange betingelser og har en lang liste med forskellige cases, kan man score på hastigheden ved at rangere de mest sandsynlige øverst (hvis man da ved, hvad der er mest sandsynligt).

Relateret: