Select Case-strukturen är en användbar VBA-struktur för beslut som involverar tre eller fler alternativ i Excel 2016 (även om den också fungerar med två alternativ, vilket ger ett alternativ till If-Then-Else-strukturen).
Ett exempel på Select Case
Följande exempel visar hur du använder strukturen Välj ärende:
Sub ShowRabatt3()
Dimmängd så lång
Dimrabatt som dubbel
Kvantitet = InputBox("Ange kvantitet: ")
Välj ärendekvantitet
Fall 0 till 24
Rabatt = 0,1
Fall 25 till 49
Rabatt = 0,15
Fall 50 till 74
Rabatt = 0,2
Fall är >= 75
Rabatt = 0,25
Avsluta Välj
MsgBox "Rabatt: " & rabatt
Avsluta Sub
I det här exemplet utvärderas variabeln Kvantitet. Rutinen kontrollerar fyra olika fall (0–24, 25–49, 50–74 och 75 eller fler).
Valfritt antal uttalanden kan följa varje Case-sats, och de exekveras alla om fallet är sant. Om du bara använder en sats, som i det här exemplet, kan du sätta satsen på samma rad som nyckelordet Case, föregås av ett kolon - VBA-satsavgränsaren. Detta gör koden mer kompakt och lite tydligare. Så här ser rutinen ut i det här formatet:
Sub ShowRabatt4 ()
Dimmängd så lång
Dimrabatt som dubbel
Kvantitet = InputBox("Ange kvantitet: ")
Välj ärendekvantitet
Fall 0 till 24: Rabatt = 0,1
Fall 25 till 49: Rabatt = 0,15
Fall 50 till 74: Rabatt = 0,2
Fall är >= 75: Rabatt = 0,25
Avsluta Välj
MsgBox "Rabatt: " & rabatt
Avsluta Sub
När VBA kör en Select Case-struktur avslutas strukturen så snart VBA hittar ett sant case och exekverar satserna för det fallet.
Ett inkapslat exempel på Select Case
Som visas i följande exempel kan du kapsla Select Case-strukturer. Denna rutin undersöker den aktiva cellen och visar ett meddelande som beskriver cellens innehåll. Observera att proceduren har tre Select Case-strukturer och var och en har sin egen End Select-sats:
Sub CheckCell()
Dim Msg As String
Välj Case IsEmpty (ActiveCell)
Fall Sant
Msg = "är tomt."
Case Else
Välj Case ActiveCell.HasFormula
Fall Sant
Msg = "har en formel"
Case Else
Välj Case IsNumeric (ActiveCell)
Fall Sant
Msg = "har ett nummer"
Case Else
Msg = "har text"
Avsluta Välj
Avsluta Välj
Avsluta Välj
MsgBox "Cell" & ActiveCell.Address & " " & Msg
Avsluta Sub
Logiken är ungefär så här:
Ta reda på om cellen är tom.
Om den inte är tom, se om den innehåller en formel.
Om det inte finns någon formel, ta reda på om den innehåller ett numeriskt värde eller text.
När rutinen avslutas innehåller Msg-variabeln en sträng som beskriver cellens innehåll. MsgBox-funktionen visar det meddelandet.

Ett meddelande som visas av CheckCell-proceduren.
Du kan kapsla Select Case-strukturer så djupt du behöver, men se till att varje Select Case-sats har en motsvarande End Select-sats.
Om du fortfarande inte är övertygad om att indragskod är värt ansträngningen, fungerar den tidigare noteringen som ett bra exempel. Fördjupningarna verkligen för att göra häckningsnivåerna tydliga. Ta en titt på samma procedur utan indrag:
Sub CheckCell()
Dim Msg As String
Välj Case IsEmpty (ActiveCell)
Fall Sant
Msg = "är tomt."
Case Else
Välj Case ActiveCell.HasFormula
Fall Sant
Msg = "har en formel"
Case Else
Välj Case IsNumeric (ActiveCell)
Fall Sant
Msg = "har ett nummer"
Case Else
Msg = "har text"
Avsluta Välj
Avsluta Välj
Avsluta Välj
MsgBox "Cell" & ActiveCell.Address & " " & Msg
Avsluta Sub
Ganska obegripligt, eller hur?