VBA Select Case Statement

Ve VBA, Vyberte Případ je alternativou k Prohlášení If-Then, což vám umožní otestovat, zda jsou splněny podmínky, spuštěním konkrétního kódu pro každou podmínku. Výběr příkazu je vhodnější než příkaz If, pokud existuje více podmínek ke zpracování.

Vyberte Příklad případu

Tento příklad vyzve uživatele pomocí YesNoCancel MessageBox a otestuje, kterou možnost uživatel vybral:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Vyberte Case nResultPřípad vbAnoMsgBox „Ano“Case vbNoMsgBox „Ne“Případ vbCancelMsgBox "Zrušit"Konec VybratEnd Sub

Níže jsme sepsali ekvivalent pomocí prohlášení If. Všimnete si, že prohlášení o výběru případů zahrnuje o něco méně psaní - tato výhoda je umocněna při testování více kritérií.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Pokud nResult = vbYes ThenMsgBox „Ano“ElseIf nResult = vbNo ThenMsgBox „Ne“ElseIf nResult = vbCancel PotomMsgBox "Zrušit"Konec IfEnd Sub

Syntaxe prohlášení o případu

Syntaxe příkazu Select Case je následující:

12345678910 Vyberte případ [testovací výraz]Případ [Podmínka 1][Akce, pokud je splněna podmínka 1]Případ [Podmínka 2][Akce, pokud je splněna podmínka 2]Případ [Podmínka n][Akce, pokud je podmínka n pravdivá]Případ jinak[Akce, pokud žádná není pravdivá]Konec Vybrat

Kde:

[Testovací výraz] - Je hodnota k vyhodnocení. Obvykle se jedná o proměnnou.

[Akce, pokud je splněna podmínka n] - Je pouze kód, který se má spustit, pokud je splněna podmínka (stejně jako u příkazu If)

[Podmínka n] - Je podmínkou testování. Existuje mnoho různých způsobů testování podmínek. Budeme o nich diskutovat níže.

Příkaz Case spustí kód pro PRVNÍ podmínku, u které bylo zjištěno, že je PRAVDA. Pokud není splněna žádná podmínka, nebude spuštěn žádný kód, pokud není přidána klauzule Else.

Vyberte Kritéria případu

Select Cases lze použít k vyhodnocení číselných hodnot i textu. Nejprve si probereme, jak pomocí Select Cases vyhodnotit číselné výrazy.

Přesná shoda - čísla

Přesnou shodu můžete snadno otestovat pomocí prohlášení o případech:

1 Případ 10

nebo přidejte čárky k testování přesných shod s více čísly:

1 Případ 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n jako celé číslon = CInt (InputBox ("…"))Vyberte případ čPřípad 10„Pokud n je 10, pakPřípad 20, 30, 40„Pokud n je 20/30/40 PakPřípad jinak„Pokud n není 10/20/30/40 PakKonec VybratEnd Sub

Rozsahy

Můžete vyzkoušet, zda číslo spadá do rozsahu takto:

1 Případ 55 až 74

Tento postup vygeneruje pro studenta skóre podle písmene na základě jeho numerického skóre:

12345678910111213141516171819202122 Dílčí Calc_Grade ()Dim Score As IntegerDim LetterGrade jako řetězecSkóre = InputBox („Zadejte skóre studentů“)Vyberte Skóre případůPřípad 90 až 100LetterGrade = "A"Případ 80 až 90LetterGrade = "B"Případ 70 až 80LetterGrade = "C"Případ 60 až 70LetterGrade = "D"Případ JinakLetterGrade = "F"Konec VybratMsgBox „Student's Grade is:“ & LetterGradeEnd Sub

Rozsahy můžete také testovat pomocí Case Is

Vyberte možnost Case Is

1234 Případ je <55'Nedělat nicPřípad <= 74MsgBox „V dosahu“

Pamatujte, že Případ bude spouštět kód POUZE pro první shodu.

Tento postup vypočítá hodnocení studenta pomocí Case Is namísto Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score As IntegerDim LetterGrade jako řetězecSkóre = InputBox („Zadejte skóre studentů“)Vyberte Skóre případůPřípad je> = 90LetterGrade = "A"Případ je> = 80LetterGrade = "B"Případ je> = 70LetterGrade = "C"Případ je> = 60LetterGrade = "D"Případ jinakLetterGrade = "F"Konec VybratMsgBox „Student's Grade is:“ & LetterGradeEnd Sub

Případ jinak

Na konec svého prohlášení o případu můžete přidat „Case Else“, abyste mohli něco udělat, pokud nejsou splněny žádné podmínky:

1 Případ jinak

Na konci předchozího příkladu kódu zjistíte, jak lze Case Case použít.

Vyberte operátor Case - Text & Like

Naše příklady Select Case dosud fungovaly pouze s čísly. Můžete také použít příkazy Select Case s textem.

Přesná shoda - text

Můžete otestovat, zda se výraz shoduje s přesnou frází, jako je tato:

1 Případ "řepa"

Nebo použijte čárky k otestování, zda se výraz přesně shoduje s více než jednou frází:

1 Pouzdro "Apple", "Banana", "Orange"

Sestavení vypadá takto:

12345678910 Sub ExactMatch_Food ()Vyberte rozsah případů („a1“). HodnotaPřípad "řepa"MsgBox „Zelenina“Pouzdro "Apple", "Banana", "Orange"MsgBox „Ovoce“Konec VybratEnd Sub

Velká a malá písmena

Standardně VBA rozlišuje velká a malá písmena. To znamená, že VBA považuje „text“ za jiný než „text“. Chcete-li rozlišovat velká a malá písmena, přidejte do horní části modulu text pro porovnání:

1 Možnost Porovnat text

V tomto příkladu bude Case Select při práci s textem nerozlišovat velká a malá písmena:

123456789101112 Možnost Porovnat textSub ExactMatch_Food ()Vyberte rozsah případů („a1“). HodnotaPřípad "řepa"MsgBox „Zelenina“Pouzdro "Apple", "Banana", "Orange"MsgBox „Ovoce“Konec VybratEnd Sub

Případ jako

Operátor Like vám umožňuje provádět nepřesná srovnání. Pokud se text shoduje, Like vrátí hodnotu TRUE, pokud ne, vrátí hodnotu FALSE. Díky tomu se operátor Like snadno používá s příkazy If, ale s příkazy Case to nebude fungovat tak snadno.

Case Like - neúspěšný test

Následující kód ukazuje, že operátor Like nefunguje s Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Tlumené slovo jako řetězecslovo = "COCOA"Vyberte Case casePřípadové slovo2 Jako „*C*C*“MsgBox „Dobrý“Případ jinakMsgBox „Není dobré“Konec VybratEnd Sub

Případ jako - správný způsob

Můžeme však přidat výraz TRUE, aby příkaz Select Select fungoval s operátorem Like:

1234567891011 Sub Select_Case_Like_CorrectWay ()Tlumené slovo jako řetězecslovo = "COCOA"Vyberte Case TruePřípadové slovo jako „*C*C*“MsgBox „Dobrý“Případ jinakMsgBox „Není dobré“Konec VybratEnd Sub

Případ - Colon

Při používání Případu můžete přidat tolik řádků kódu, kolik chcete spustit s každou podmínkou. Pokud však potřebujete spustit pouze jeden řádek kódu. K napsání všeho na stejný řádek můžete použít dvojtečku (:).

Zde je stejný příklad studentské třídy jako dříve, kromě použití dvojtečky ke zkrácení kódu:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score As IntegerDim LetterGrade jako řetězecSkóre = InputBox („Zadejte skóre studentů“)Vyberte Skóre případůPřípad 90 až 100: LetterGrade = "A"Případ 80 až 90: LetterGrade = "B"Případ 70 až 80: LetterGrade = "C"Případ 60 až 70: LetterGrade = "D"Případ jiný: LetterGrade = "F"Konec VybratMsgBox „Student's Grade is:“ & LetterGradeEnd Sub

Výběr případu - A / Nebo - Více podmínek

Pomocí operátorů And / Or můžete spolu s výběrem případu otestovat další kritéria.

V tomto příkladu používáme Select Case na proměnné ‘věk’, ale chceme také otestovat sex. K provedení složitějšího testu tedy používáme And Operator:

123456789101112131415161718 Sub NestedSelectCase ()Dim sex jako řetězecDim age As Integersex = „muž“ nebo ženavěk = 15Vyberte Case casePřípad je <20 a sex = "muž"Msgbox „Muž do 20 let“Případ je <20 a sex = "žena"Msgbox „Žena do 20 let“Případ je> = 20 a sex = "muž"Msgbox „Muž nad 20“Případ je> = 20 a sex = "žena"Msgbox „Žena nad 20“Konec VybratEnd Sub

Vnořená prohlášení o případech

Stejně jako příkazy If můžete do sebe vnořovat příkazy Case:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex jako řetězecDim age As Integersex = „muž“ nebo ženavěk = 15Vyberte Case casePřípad je <20Vyberte Case sexPřípad "muž"MsgBox "Muž do 20"Případ "žena"MsgBox "Žena do 20 let"Konec VybratPřípad je> = 20 a sex = "žena"Vyberte Case sexPřípad "muž"MsgBox "Muž nad 20"Případ "žena"MsgBox „Žena nad 20“Konec VybratKonec VybratEnd Sub

Případ případ vs. prohlášení If

Čím více podmínek k testování, tím užitečnější je prohlášení o případu ve srovnání s příkazem If. Podívejme se na příklad.

Zde je kód požadovaný k otestování, zda se název listu rovná sadě hodnot pomocí příkazu If:

12345 If Name = "Budget" Nebo Name = "Forecast" Nebo Name = "Trailing12" Nebo _Název = "Flex" Nebo Název = "Jiné poměry" Nebo Název = "Porovnání" Nebo _Name = "BudReview" Nebo Name = "P & L_Review" Nebo Name = "Other" Potom'Dělej něcoKonec If

Zde je stejný kód, který místo toho používá příkaz Select:

12345 Vyberte název případuPřípad "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _„Porovnání“, „BudReview“, „P & L_Review“, „Jiné“'Dělej něcoKonec Vybrat

Vidíte, že je v tomto scénáři mnohem jednodušší použít příkaz Select. Je to podstatně méně psaní a je to mnohem snáze čitelné.

VBA Select Case Příklady

Příklad 1. Případová dokumentace Uživatelem definovaná funkce (UDF)

Zopakujme výše uvedený příklad výpočtu známky a vytvořme UDF pro výpočet skóre studenta:

12345678910111213141516 Funkce GetGrade (skóre jako celé číslo) jako řetězecVyberte Skóre případůPřípad 90 až 100GetGrade = "A"Případ 80 až 90GetGrade = "B"Případ 70 až 80GetGrade = "C"Případ 60 až 70GetGrade = "D"Případ jinakGetGrade = "F"Konec VybratKoncová funkce

Nyní můžeme použít funkci GetGrade v našem listu aplikace Excel k rychlému výpočtu známek studentů:

Příklad 2. Název testovacího listu / Prohlášení o případu smyčky

Tento kód bude procházet všemi listy v sešitu, UnProtecting listy, které splňují určitá kritéria:

123456789101112 Dílčí případ_UnProtectSheet ()Dim ws As WorksheetZa každé ws v pracovních listechVyberte Case ws.Name 'Seznam všech listů s RatioPřípad "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _„Porovnání“, „BudReview“, „P & L_Review“, „Jiné“w. OdemknoutKonec VybratDalší wsEnd Sub

Příklad 3. Vyberte Case - Cell value

Tento příklad bude testovat skóre studenta v buňce s výstupem hodnocení písmene přímo do buňky vpravo.

12345678910111213141516 Sub TestCellValue ()Dim buňka jako rozsahNastavit buňku = rozsah ("C1")Vyberte Case case.ValuePřípad 90 až 100cell.Offset (0, 1) = "A"Případ 80 až 90buňka.Offset (0, 1) = "B"Případ 70 až 80cell.Offset (0, 1) = "C"Případ 60 až 80buňka.Offset (0, 1) = "D"Konec VybratEnd Sub

Příklad 4. Vyberte případ - data

Tento příklad výběru případů je funkce, která testuje, do kterého čtvrtletí spadá datum.

123456789101112131415161718 Datum dílčího testu ()MsgBox GetQuarter (CDate ("7/20/2019"))End SubFunkce GetQuarter (dt jako datum) jako celé čísloDim sht As jako pracovní listVyberte Case dtCase CDate („01/01/2019“) To CDate („03/31/2019“)GetQuarter = 1Case CDate („04/01/2019“) To CDate („06/30/2019“)GetQuarter = 2Case CDate („07/01/2019“) To CDate („09/30/2019“)GetQuarter = 3Case CDate („10/01/2019“) To CDate („12/31/2019“)GetQuarter = 4Konec VybratKoncová funkce

Protože je to funkce, můžete ji použít jako funkci v aplikaci Excel:

Př. 5 Zkontrolujte, zda je číslo liché nebo sudé

Tento příklad testuje, zda je číslo liché nebo sudé.

123456789101112 Dílčí CheckOddEven ()Dim n jako celé číslon = InputBox („Zadejte číslo“)Vyberte Case n Mod 2Případ 0MsgBox "Číslo je sudé."Případ 1MsgBox "Číslo je liché."Konec VybratEnd Sub

Př. 6 Otestujte, zda je Datum ve všední den nebo o víkendu

Tyto příklady otestují, zda datum připadne na všední den nebo víkend.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("1/1/2020")Select Case Weekday (dt)Případ vbPondělíMsgBox „Je pondělí“Případ vbÚterýMsgBox „Je úterý“Případ vb StředaMsgBox „Je středa“Případ vbČtvrtekMsgBox „Je čtvrtek“Případ vbPátekMsgBox „Je pátek“Případ vbSobotaMsgBox „Je sobota“Případ vb NeděleMsgBox „Je neděle“Konec VybratEnd Sub
123456789101112 Dílčí kontrolní víkend ()Dim dt As Datedt = CDate ("1/1/2020")Select Case Weekday (dt)Případ vbSobota, vbNeděleMsgBox „Je víkend“Případ jinakMsgBox „Není víkend“Konec VybratEnd Sub

VBA Select Case v Accessu

Všechny výše uvedené příklady fungují v Access VBA úplně stejně jako v Excelu VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs jako databázeDim první jako RecordSetNastavit dbs = CurrentDBNastavit rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)S první.MoveFirst.UpravitVyberte Case rst.Fields („City“)Případ "Austin".rst.Fields ("TelCode") = "512"Případ "Chicago".rst.Fields ("TelCode") = "312"Případ „New YorK“.rst.Fields ("TelCode") = "1212"Případ "San Fransisco".rst.Fields ("TelCode") = "415"Konec Vybrat.AktualizaceKonec sKonec Sus
wave wave wave wave wave