Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-teorie-zaklady » select-case-excel-vba

Select Case - Excel VBA

Videokurzy Excel

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

Úvodem

Select Case Excel VBA - ukázka

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.


Teorie a syntaxe Select Case

Vhodná pro rozhodování mezi třemi a více možnostmi. Je alternativou k If Then.

Syntaxe

Select Case testovaný_výraz [Case seznam_výrazů-n [příkazy-n]] [Case Else [elsepříkazy]] End Select

Popis argumentu

  • testovaný_výraz - Povinné. Libovolný číselný výraz nebo řetězcový výraz.
  • seznam_výrazů-nPovinné, vyskytne-li se Case. Oddělený seznam položek v následujícím formátu:
    • výraz
    • výraz To výraz - Klíčové slovo To určuje rozsah hodnot. Menší hodnota musí být uvedena před To.
    • Is výraz s operátory_porovnání - Klíčové slovo Is s operátory porovnání (kromě Is a Like) lze použít pro určení rozsahu hodnot.
    • kombinace výše uvedených - odděleno čárkou
  • příkazy-n - Volitelné. Jeden nebo více příkazů vykonaných, jestliže testovaný_výraz odpovídá libovolné části ze seznamu_příkazů-n.
  • elsepříkazy - Volitelné. Jeden nebo více příkazů vykonaných, jestliže testovaný_výraz neodpovídá žádné klauzuli z Case.

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.

Vyhodnocení dvou podmínek

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

Více podmínek v jedné case - Select Case

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

Sudé nebo liché

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

Podle rozsahu

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

Kontrola podle rozsahu

Příklad kdy se kontroluje rozsah.

Case Is > MaxCislo

Podle čísla

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

Číslo na slovní hodnocení

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)

Praktická ukázka - Select Case

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í.

Porovnávání textů

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"

Kontrola dle zadaných textů

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

Rozsah textů

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

Porovnávání textů s Like

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

Postřehy z praxe

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.

Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor Case Select - Excel VBA - praktické příklady soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Další související články

Závěrem

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

Podpora - oceňte web a pozvěte mě na čokoládu

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 .

Poděkování

Děkuji za váš čas a doufám, že jste nalezli odpověď na svůj problém.

Vylepšení

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.


Pavel Lasák - autor webu

Pavel Lasák

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.

   Pavel Lasák LinkedIn Profil    Pavel Lasák twitter Profil





Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 |