Excel VBA má konstrukci IF Then Else, kterou můžete použít k analýze více podmínek a provádění kódů na základě těchto podmínek.
Další podobný konstrukt, který vám umožňuje zkontrolovat více podmínek, je příkaz SELECT CASE.
Select Case je užitečný, když máte tři nebo více podmínek, které chcete zkontrolovat. Můžete to také použít se dvěma podmínkami (ale mám pocit, že v těchto případech je snadnější použít Else).
Jednoduchý příklad, kde je příkaz Select Case užitečný, když chcete získat hodnocení student na základě známek, které skóroval (popsáno jako příklad dále v tomto výukovém programu).
Poznámka: Všechny ukázkové kódy obsažené v tomto výukovém programu mají být umístěny v modulu ve VBA.
Tento kurz pokrývá:
Vyberte syntaxi případů
Níže je uvedena syntaxe Select Case v aplikaci Excel VBA:
Select Case Test_ExpressionCase Value_1Code Block when Test_Expression = Value_1Case Value_2Code Block when Test_Expression = Value_2Case Value_3Code Block when Test_Expression = Value_3Case ElseCode Block when none of the case conditions are metEnd Select
- Test_Expression: Toto je výraz, jehož hodnotu analyzujeme pomocí různých případů (vysvětleno lépe pomocí níže uvedených příkladů).
- Podmínka_1, Podmínka_2,…: Toto jsou podmínky, za kterých je textový výraz testován. Pokud splňuje podmínku, provede se blok kódu pro danou podmínku.
Pro každý příkaz Select Case, který používáte, musíte použít příkaz End Select.
Vyberte příklady případů
Nyní k abychom lépe porozuměli tomu, jak používat příkaz Select Case ve VBA, pojďme si projít několik příkladů.
Všimněte si, že většina příkladů v tomto tutoriálu má vysvětlit tento koncept. Toto může nebo nemusí být nejlepší způsob, jak dokončit práci.
Začněme jednoduchým příkladem toho, jak nám Select Case umožňuje kontrolovat podmínky.
Příklad 1 – Zkontrolujte čísla
V níže uvedeném příkladu kód vyzve uživatele k zadání libovolného čísla mezi 1 a 5 a poté zobrazí okno se zprávou s číslem, které uživatel zadal.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 5")Select Case UserInputCase 1MsgBox "You entered 1"Case 2MsgBox "You entered 2"Case 3MsgBox "You entered 3"Case 4MsgBox "You entered 4"Case 5MsgBox "You entered 5"End SelectEnd Sub
Upozorňujeme, že tento kód není zdaleka užitečný a není ani stoprocentně odolný. Například pokud zadáte 6 nebo jakýkoli řetězec, nic by to neudělalo. Ale jak jsem již zmínil, mým záměrem je zde předvést, jak funguje Select Case.
Příklad 2 – Použití Select Case s podmínkou IS
Můžete použít podmínku IS s konstrukcí Select Case ke kontrole hodnoty čísel.
Níže uvedený kód kontroluje, zda je vstupní číslo větší než 100 nebo ne.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case Is >= 100MsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
Příklad 3 – Použití Case Else k zachycení všeho
Ve výše uvedeném příkladu jsem použil dvě podmínky (menší než 100 nebo větší nebo rovné 100).
Místo druhého případu s podmínku, můžete také použít Case Else.
Case Else funguje jako univerzální a vše, co nespadá do žádného z předchozích případů, je považováno za Case Else.
Níže je ukázkový kód, kde jsem použil Case Else:
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number")Select Case UserInputCase Is < 100MsgBox "You entered a number less than 100"Case ElseMsgBox "You entered a number more than (or equal to) 100"End SelectEnd Sub
Příklad 4 – Použití rozsahu čísel
Ve výběru Případ, můžete také zkontrolovat rozsah čísel.
Níže uvedený kód požádá o vstup a na základě hodnoty zobrazí okno se zprávou.
Sub CheckNumber()Dim UserInput As IntegerUserInput = InputBox("Please enter a number between 1 and 100")Select Case UserInputCase 1 To 25MsgBox "You entered a number less than 25"Case 26 To 50MsgBox "You entered a number between 26 and 50"Case 51 To 75MsgBox "You entered a number between 51 and 75"Case 75 To 100MsgBox "You entered a number more than 75"End SelectEnd Sub
Příklad 5 – Získejte známku na základě skóre známek
Zatím jsme viděli základní příklady (které v praktickém světě nejsou opravdu užitečné).
Zde je příklad, který je blíže příkladu z reálného světa, kde můžete použít Select Case v aplikaci Excel VBA.
Následující kód vám dá známku, kterou student dostane na základě známky ve zkoušce.
Výše uvedený kód požádá uživatele o známky a na základě toho zobrazí okno se zprávou s výsledným hodnocením.
Ve výše uvedeném kódu mám specifikoval všechny podmínky – pro známky 0 – 100.
Další způsob, jak použít Select Case, je použít na konci Case Else. To je užitečné, pokud jste zohlednili všechny podmínky a poté určíte, co dělat, když není splněna žádná z podmínek.
Níže uvedený kód je variantou kódu třídy s malou změnou. Nakonec má příkaz Case else, který se provede, když nebude splněna žádná z výše uvedených podmínek.
Příklad 6 – Vytvoření vlastní funkce (UDF) pomocí Select Case
Ve výše uvedeném příkladu kód požádal uživatele o zadání značek.
Můžete také vytvořit vlastní funkci (User Defined Function), kterou lze použít jako jakoukoli běžnou funkci listu a která se vrátí známka studentů.
Níže je uveden kód, který vytvoří vlastní vzorec:
Function GetGrade(StudentMarks As Integer)Dim FinalGrade As StringSelect Case StudentMarksCase Is < 33FinalGrade = "F"Case 33 To 50FinalGrade = "E"Case 51 To 60FinalGrade = "D"Case 60 To 70FinalGrade = "C"Case 70 To 90FinalGrade = "B"Case ElseFinalGrade = "A"End SelectGetGrade = FinalGradeEnd Function
Jakmile budete mít tento kód v modulu, můžete použít funkci GetGrade v listu, jak je znázorněno níže.
Příklad 7 – Zkontrolovat ODD / EVEN s Select Case
Níže je ukázkový kód, kde jsem zkontrolujte, zda je číslo v buňce A1 liché nebo sudé.
Příklad 8 – Kontrola dne v týdnu / víkendu (více podmínek)
Pomocí možnosti Vybrat případ můžete také zkontrolovat více hodnot v stejný případ.
Například níže uvedený kód používá aktuální datum k tomu, aby ukázal, zda je dnes den v týdnu nebo víkend (kde víkendovými dny jsou sobota a neděle)
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7MsgBox "Today is a Weekend"Case ElseMsgBox "Today is a Weekday"End SelectEnd Sub
Ve výše uvedeném kódu kontrolujeme dvě podmínky (1 a 7) ve stejném případě.
Poznámka: Funkce Weekday vrací 1 pro neděli a 7 pro sobotu.
Příklad 9 – Vnořené příkazy Select Case
Jeden příkaz Select Case můžete také vnořit do jiného.
Níže je uveden kód, který kontroluje, zda je den dnem v týdnu nebo víkend, a pokud je víkend, zobrazí se, zda je sobota nebo neděle.
Sub CheckWeekday()Select Case Weekday(Now)Case 1, 7 Select Case Weekday(Now) Case 1 MsgBox "Today is Sunday" Case Else MsgBox "Today is Saturday" End SelectCase ElseMsgBox "Today is a Weekday"End SelectEnd Sub
Ve výše uvedeném kódu Vnořil jsem Select Case, abych zkontroloval, zda je víkend sobota nebo neděle.
Poznámka: Výše uvedený příklad vysvětluje koncept. To není nejlepší ani nejpraktičtější způsob, jak zjistit všední den / víkend.
Příklad 10 – Kontrola textového řetězce pomocí Select Case
Pomocí řetězce Select Case můžete zkontrolovat konkrétní řetězce a poté na základě toho spustit kód.
V níže uvedeném příkladu kód vyzve uživatele k zadání názvu svého oddělení a zobrazí jméno osoby, s níž by se měl spojit pro přihlášení.
Sub OnboardConnect()Dim Department As StringDepartment = InputBox("Enter Your Department Name")Select Case DepartmentCase "Marketing"MsgBox "Please connect with Bob Raines for Onboarding"Case "Finance"MsgBox "Please connect with Patricia Cruz for Onboarding"Case "HR"MsgBox "Please connect with Oliver Rand for Onboarding"Case "Admin"MsgBox "Please connect with Helen Hume for Onboarding"Case ElseMsgBox "Please connect with Tony Randall for Onboarding"End SelectEnd Sub
Doufám, že všechny výše uvedené příklady pomohly porozumět konceptu a aplikaci Select Case v aplikaci Excel VBA.
Také by se vám mohly líbit následující výukové programy VBA:
- Smyčky Excel VBA – Pro další, Do While, Do Dokud, pro každou.
- Pro další smyčku v Excel VBA.
- Jak zaznamenat makro v Excel.