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
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
If Range("B1").Value = 2 Then
Range("C1").Value = 4
End If
Case Else
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:
|