Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak vykonat jednu skupinu příkazů z několika, podle hodnoty výrazu.
Doplněno: 2.8.2015
Potřebujeme-li vykonat určitou posloupnost příkazu na základě hodnoty příslušného výrazu. Například hodnota příspěvku dle věku dítěte. Velikost slevy podle hodnoty objednávky. Kontrola dle zadaného textu.
Poznámka: K řešení lze použít příkazy If, Then, ElseIf, Else, čimž docílíte stejného efektu, ale někdy je výhodnější z důvodu přelednosti použít Select Case. Co kdy záleží na každém programátorovi.
Vhodná pro rozhodování mezi třemi a více možnostmi. Je alternativou k If Then.
Select Case testovaný_výraz
[Case seznam_výrazů-n
[příkazy-n]]
[Case Else
[elsepříkazy]]
End Select
Po provedení prvního Case odpovídajícího testovanému výrazu skočí vykonávající program na příkaz hned za End Select. Takže v případě, že by testovaný výraz odpovídal i některé následující podmínce tak tato nebude vykonána. Pouze ta "první".
Neodpovídá-li žádný seznam_výrazů Case testovanému_výrazu a neexistuje-li příkaz Case Else, pokračuje běh příkazem následujícím za příkazem End Select.
Příkazy Select Case mohou být vnořené. Každý vnořený příkaz Select Case musí mít odpovídající příkaz End Select.
V příkladu budeme vyhodnocovat odpověď na otázku z MsBoxu. MsgBox vrací odpověď vbNo, vbYes do promění i. Odpovědět lze pouze ANO, NE.
Private Sub CommandButton1_Click()
i = MsgBox("Chcete větši plat?", vbYesNo, "Plat")
' vyhodnocení odpovědi
Select Case i
Case vbNo
MsgBox ("Vaše odpověď NE.")
Case vbYes
MsgBox ("Vaše odpověď ANO.")
End Select
End Sub
Příklad kdy je potřeba použít více podmínek pro jeden výraz. VYužívá se čárka pro další podmínku nebo To pro rozsah.
Case 1 To 4, 7 To 9, 11, 13
Schválně je využito vyjmenování jednotlivých čísel. Lze řešit i jako zjištění zda je číslo dělitelné 2 bezezbytku, atd.
Cislo = InputBox("Zadej číslo 1 to 10:")
Select Case Cislo
Case 2, 4, 6, 8, 10
MsgBox "číslo sudé."
Case 1, 3, 5, 7, 9
MsgBox "číslo liché."
Case Else
MsgBox "Nelze rozhodnout."
End Select
Rozhodnutí zda číslo patří do určitého rozsahu.
Cislo = InputBox("Zadej číslo 1 to 10:")
' rozhodnutí
Select Case Cislo
Case 1 To 3
MsgBox "Číslo: 1 až 3"
Case 4 To 6, 10
MsgBox "Číslo 4,5,6, 10"
Case 7 To 9
MsgBox "Číslo 7,8,9"
Case Else
MsgBox "Nelze rozhodnout."
End Select
Příklad kdy se kontroluje rozsah.
Case Is > MaxCislo
Je větší, menší, rovno danému číslu? Protože se porovnává číslo je nutno uvést Is.
Cislo = InputBox("Zadej číslo 1 to 10:")
' Je číslo menší, větší rovno dvě?
Select Case Cislo
Case Is < 2
MsgBox "Číslo je menší než 2"
Case Is = 2
MsgBox "Číslo je 2"
Case Is > 2
MsgBox "Číslo je větší než 2"
End Select
Využití pro kontrolu studijních výsledku a přepsaní bodového hodnocení na slovní.
Cislo = Range("B16").Value
Select Case Cislo
Case Is >= 90
result = "Excelentní"
Case Is >= 70
result = "velmi dobré"
Case Is >= 50
result = "dobré"
Case Is >= 20
result = "nic moc"
Case Else
result = "velice špatné"
End Select
MsgBox (result)
Cislo = 8 ' Inicializuj proměnnou.
Select Case Cislo ' Vyhodnoť Cislo.
Case 1 To 5 ' Cislo leží v intervalu 1 až 5.
Debug.Print "Mezi 1 a 5"
' Následující větev Case je jediná, která se vyhodnotí jako True.
Case 6, 7, 8 ' Cislo leží v intervalu 6 až 8.
Debug.Print "Mezi 6 a 8"
Case Is > 8 And Cislo < 11 ' Cislo se rovná 9 nebo 10.
Debug.Print "Větší než 8"
Case 8 ' Cislo lje 8.
' Následující větev Case ač odpovída podmínce nebude vykonána
Debug.Print "Je 8"
Case Else ' Jiné hodnoty.
Debug.Print "Neleží mezi 1 a 10"
End Select
Poznámka: Místo výpisu do MsgBox lze použít Okamžité okno, kde vidíme zda nám příklady fungují.
Méně obvyklé příklady použítí výrazu Select Case například pro text a rozsah textů.
Case odpovídá řetězcům, které jsou shodné s “vše“, řetězcům, které náleží mezi “aa“ a “ccc“. Excel porovnává velká a malá písmena (velikost znaku se převezme z ASCII tabulky.
' A < B < E < Z < a < b < e < z
Case "aa" To "ccc"
Zadávájí se názvy ovoce a zeleniny a podle zadání Case Select vypíše zda jde o ovoce nebo zeleninu. Pokud v seznamu není uvedeno bude vypsáno, že nelze rozhonout.
Hodnota = InputBox("Zadej ovoce, zelenina:")
' rozhodnutí co bylo zadáno - ovoce, zelenina
Select Case Hodnota
Case "Jablko", "Hruška", "Banan", "Jahoda"
MsgBox "Jde o ovoce ..."
Case "Mrkev", "Petržel", "zelí"
MsgBox "Jde o zeleninu ..."
Case Else
MsgBox "Nemůžu rozhodnout."
End Select
Pro rozsah textu Excel počítá s velikosti písmen (viz ASCII tabulka)
Select Case Range("B20").Text
Case "aa" To "dd"
MsgBox "aa - dd"
Case Else
MsgBox "ostatní"
End Select
Obrovským pomocníkem při práci s texty je i operátor Like (pokud nechcete používat regulární výrazy).
slovo = "JakNaExcel"
Select Case True
Case slovo Like "*Na*"
MsgBox "Nalezeno"
Case Else
MsgBox "Nenelezeno"
End Select
' výsledek nalezeno
Případně pro nenelezeno
slovo = "JakNaExcel"
Select Case True
Case slovo Like "*Naa*"
MsgBox "Nalezeno"
Case Else
MsgBox "Nenelezeno"
End Select
' výsledek nenalezeno
Podrobněji o operátoru Like v článku: Operátory Like v VBA Excel
Klauzule Case Else se používá k označení elsepříkazů, které se vykonávají, nebude-li v seznamu_výrazů nalezen odpovídající výraz. Sice je volitelný, ale já ho doporučuji používat.
Soubor
Case Select - Excel VBA - praktické příklady
ke stažení zdarma. Soubor využívá makra.
Tento článek je součástí on-line výukového kurzu VBA MS Excel.
Napada-li Vás doplnění k Case Select? Můžete využít komentáře.
Článek byl aktualizován: 19.09.2020 11:07
Pomohl vám článek? Vyřešili jste problém? Můžete mě podpořit zakoupení tabulky (samozdřejmě čokoládové), když kafe nepiji ;) Odkaz na zakoupení čokolády. Za veškerou podporu vám děkuji a samozdřejmě jí využiji do zdokonalování a rozšířování webu.
Případně přidejte odkaz na vaši oblíbenou sociální síť, případně využijste hashtag #JakNaExcel .
Děkuji za váš čas a doufám, že jste nalezli odpověď na svůj problém.
Narazili jste v článku na nejasnost, chybu? Máte tip na vylepšení nebo doplnění článku? Budu rád pokud se zmínite v komentářích.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od dubna roku 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím 8x za sebou). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 20 let (o Excel píší přes 25). Zdarma je zde přes 1.500 návodu, tipů a triků, včetně přes 350 různých šablon, sešitů a přes 70 taháků v pdf.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2025 |