V aplikaci Excel VBA vám příkaz IF Then Else umožňuje vyhledat podmínku a podle toho provést akci.
To je v mnoha situacích nesmírně cenné, jak uvidíme v příkladech dále v tomto kurzu.
Abychom vám poskytli jednoduchý příklad, předpokládejme, že máte seznam známek v Excelu a chcete zvýraznit všechny ty studenty, kteří získali známku A. Nyní, pokud vás požádám, abyste to udělali ručně, zkontrolujete hodnocení každého studenta a zda je A, zvýrazníte to, a pokud není, necháte to tak.
Stejnou logiku lze ve VBA vytvořit pomocí Jestliže pak jinak prohlášení (a samozřejmě udělat mnohem víc než jen zvýraznění známek).
V tomto tutoriálu vám ukážu různé způsoby, jak lze konstrukci „If Then Else“ použít v aplikaci Excel VBA, a několik praktických příkladů v akci.
Ale než se dostanu ke konkrétnostem, dovolte mi, abych vám poskytl syntaxi příkazu „IF Then Else“.
Pokud máte zájem naučit se VBA jednoduchým způsobem, podívejte se na můj Online školení Excel VBA.
Syntaxe - IF Then Else
Níže je obecná syntaxe konstrukce If Then Else ve VBA
IF podmínka Pak true_code [Jiný false_code]
Nebo
IF podmínka Pak true_code Jinak false_code Konec IF
Všimněte si, že další část tohoto prohlášení je volitelná.
Pokud vás nyní zajímá, jaký je rozdíl mezi těmito dvěma syntaxemi, dovolte mi to objasnit.
První syntaxe je jednoduchý jednořádkový příkaz IF THEN ELSE, kde nepotřebujete použít příkaz END IF.
Ve druhé syntaxi je však část true_code na druhém řádku. To je užitečné, když je kód, který potřebujete spustit v případě, že podmínka IF je pravdivá, dlouhý a skládá se z více řádků.
Když rozdělíte příkaz IF do více řádků, musíte VBA říci, kde končí konstrukce IF Then.
Proto musíte použít příkaz End IF.
V případě, že End IF v případě potřeby nepoužíváte, VBA vám zobrazí chybu - „Block IF without END IF“
Příklady použití příkazu IF Then ve VBA
Abyste měli představu o tom, jak prohlášení IF-THEN funguje ve VBA, dovolte mi začít několika základními příklady (některé praktické a užitečnější příklady jsou popsány dále v tomto tutoriálu).
Předpokládejme, že máte v buňce A1 skóre studenta a chcete zkontrolovat, zda student zkoušku složil, nebo ne (práh pro úspěšné složení známek je 35).
Poté můžete použít následující kód:
Sub CheckScore () If Range ("A1"). Hodnota> = 35 Then MsgBox "Pass" End Sub
Výše uvedený kód má jeden řádek příkazu IF, který kontroluje hodnotu v buňce A1.
Pokud je to více než 35, zobrazí se zpráva - „Pass“.
Pokud je to méně než 35, nic se nestane.
Ale co když chcete v obou případech ukázat zprávu, ať už student zkoušku složil nebo neprospěl.
Následující kód by to udělal:
Sub CheckScore () If Range ("A1"). Hodnota> = 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub
Výše uvedený kód používá příkaz IF i ELSE k provedení dvou různých podmínek. Když je skóre větší než (nebo rovno) 35, podmínka IF je pravdivá a spustí se kód přímo pod ním (vše před příkazem Else).
Ale když je podmínka IF NEPRAVDA, kód skočí do Else části a spustí v ní blok kódu.
Všimněte si, že když použijeme jeden řádek příkazu IF Then, nemusíme použít End IF. Když ho ale rozdělíme na více než jeden řádek, musíme použít příkaz End If.
Vnořené IF Then (více příkazů IF Then)
Doposud jsme použili jediný příkaz IF Then.
V případě, že máte více podmínek ke kontrole, můžete použít:
- Několik podmínek IF
- If Then Else prohlášení
- IF Then ElseIf Else konstrukci
Ukážu vám, jak se liší a jak je použít v aplikaci Excel VBA.
Několik prohlášení IF IF Then
Vezměme si stejný příklad použití skóre studenta.
Pokud student dosáhne skóre menšího než 35, zobrazí se zpráva „Neprospěl“, pokud je skóre větší než nebo rovno 35, zobrazí se zpráva „Prospěl“.
K tomu můžeme použít níže uvedený kód:
Sub CheckScore () If Range ("A1"). Hodnota = 35 Then MsgBox "Pass" End Sub
Můžete použít více příkazů IF Then, jak je uvedeno výše. I když to funguje, není to příklad dobrého kódování (jak uvidíte alternativy níže).
Pokud se rozhodnete toto použít, pamatujte, že tato prohlášení by měla být nezávislá nebo vzájemně se vylučující. Zde je důležité vědět, že ve výše uvedeném konstruktu jsou vyhodnoceny všechny příkazy IF a ty, kde je podmínka pravdivá, je spuštěn kód.
Takže i když je první IF příkaz správný, druhý bude stejně vyhodnocen.
IF Then Else Statement
Předpokládejme, že tentokrát namísto zobrazení zprávy Pass/Fail máme ještě jednu podmínku.
Pokud student dosáhne skóre menšího než 35, zobrazí se zpráva „Neprospěl“, pokud je skóre větší než nebo rovno 35, zobrazí se zpráva „Prospěl“ a pokud je skóre vyšší než 80, zobrazí se zpráva je 'Pass, with Distinction'.
K tomu můžeme použít níže uvedený kód:
Sub CheckScore () If Range ("A1"). Hodnota <35 Then MsgBox "Fail" Else If Range ("A1"). Hodnota <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub
Ve výše uvedeném kódu jsme použili více příkazů IF (vnořených IF Then) pomocí Else.
Existuje tedy konstrukce „IF Then Else“ v konstrukci „IF Then Else“. Tento typ vnoření vám umožňuje zkontrolovat více podmínek a spustit příslušný blok kódu.
IF Then ElseIf Else Prohlášení
Výše uvedený kód (který jsme viděli v předchozí části) lze dále optimalizovat pomocí příkazu ElseIf.
Zde je to, co se snažíme udělat - Pokud student dosáhne skóre menšího než 35, zobrazí se zpráva „Neprospěl“, pokud je skóre větší než nebo rovno 35, zobrazí se zpráva „Prospěl“ a pokud skóre je více než 80, zobrazí se zpráva „Pass, with Distinction“.
Sub CheckScore () If Range ("A1"). Hodnota <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub
Výše uvedený kód používá ElseIf, což nám umožňuje zachovat všechny podmínky v rámci jednoho příkazu IF Then.
Pomocí AND a OR v IF Then Else
V tomto kurzu jsme zatím zkontrolovali pouze jednu podmínku najednou.
Pokud však máte více závislých podmínek, můžete s podmínkami IF použít příkaz AND nebo OR.
Níže je syntaxe použití podmínky AND/OR s příkazem IF Then.
IF Podmínka1 A Podmínka2 Potom true_code Jinak False_code Konec IF
Ve výše uvedeném kódu je spuštěn true_code pouze tehdy, jsou -li splněny podmínky Condition1 i Condition2. I když je jedna z podmínek nepravdivá, spustí false_code.
S NEBO, i když je splněna jedna z podmínek, spustí true_code. Pouze když jsou všechny podmínky nepravdivé, provede false_code.
Nyní se podívejme, jak příkaz AND a OR funguje s konstrukcí IF Then Else.
Předpokládejme, že máte skóre pro dva předměty místo jednoho a chcete zkontrolovat následující podmínky:
- Selhat - Když je skóre menší než 35 u kteréhokoli z předmětů.
- Složit - Když je skóre větší nebo rovné 35, ale menší než 80 u obou subjektů.
- Pass, with Distinction - Když je skóre více než 35 u obou subjektů a je více než nebo rovno 80 u jednoho nebo obou subjektů.
Zde je kód, který to provede:
Dílčí CheckScore () If Range ("A1"). Hodnota <35 Nebo Range ("B1"). Hodnota <35 Then MsgBox "Fail" ElseIf Range ("A1"). Hodnota <80 And Range ("B1"). Hodnota <80 Pak MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub
Výše uvedený kód používá příkazy OR a AND.
Stejný kód můžete také napsat s mírnou změnou (pomocí OR místo AND).
Sub CheckScore () If Range ("A1"). Hodnota <35 Nebo Range ("B1"). Hodnota 80 or Range ("B1"). Hodnota> 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Pokud End Sub
Oba výše uvedené kódy VBA vám poskytnou stejný výsledek. Osobně dávám přednost prvnímu, protože má logický tok kontroly skóre (ale to jsem jen já).
Použití Není rovno v Pokud Pak
Ve všech výše uvedených příkladech jsme použili podmínky, které kontrolují, zda se hodnota rovná zadané hodnotě nebo ne.
Podobné kódy můžete použít také při kontrole, když se hodnota nerovná zadané hodnotě v kódu VBA. Není rovnocenné zastoupení Excel VBA.
Chcete -li vidět praktický příklad použití, podívejte se na příklad 1 níže.
Použití If Then Else se smyčkami ve VBA
Doposud jsme procházeli několika příklady, které je dobré pochopit, jak ve VBA fungují prohlášení „IF-THEN“, ale v praktickém světě nejsou užitečné.
Pokud potřebuji ohodnotit studenty, snadno to zvládnu pomocí funkcí Excelu.
Pojďme se tedy podívat na několik užitečných a praktických příkladů, které vám mohou pomoci automatizovat některé věci a být efektivnější.
Příklad 1 - Uložit a zavřít všechny sešity kromě aktivního sešitu
Pokud máte otevřeno mnoho sešitů a chcete rychle zavřít všechny, kromě aktivního sešitu, můžete použít níže uvedený kód,
Sub SaveCloseAllWorkbooks () Dim wb as Workbook for each wb In Workbooks On error resume next If wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub
Výše uvedený kód by uložil a zavřel všechny sešity (kromě aktivního).
Pomocí smyčky For Next projde kolekcí všech otevřených sešitů a zkontroluje název pomocí podmínky IF.
Pokud název není stejný jako název aktivního sešitu, uloží ho a zavře.
V případě, že je v některém ze sešitů kód VBA a neuložili jste jej jako .xls nebo .xlsm, zobrazí se varování (protože kódy VBA se ztratí, když jej uložíte ve formátu .xlsx).
Příklad 2 - Zvýrazněte buňky se zápornými hodnotami
Předpokládejme, že máte sloupec plný čísel a chcete rychle zvýraznit všechny buňky zápornými hodnotami červeně, můžete to udělat pomocí níže uvedeného kódu.
Sub HighlightNegativeCells () Dim Cll as Range for each Cll in Selection If Cll.Value <0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub
Výše uvedený kód používá smyčku For Every a kontroluje každou buňku ve výběru, který jste provedli. Pokud má buňka zápornou hodnotu, je zvýrazněna červeně s bílou barvou písma.
Příklad 3 - Skrýt celý list kromě aktuálního listu
V případě, že chcete rychle skrýt všechny listy kromě aktivního, můžete použít níže uvedený kód:
Sub HideAllExceptActiveSheet () Dim ws jako pracovní list pro každý ws v ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub
Výše uvedený kód používá smyčku For Each k procházení sbírkou pracovních listů. Zkontroluje název každého listu a skryje jej, pokud to není aktivní list.
Příklad 4 - Extrahujte číselnou část z alfanumerického řetězce
Pokud máte v buňkách alfanumerické řetězce a chcete z nich extrahovat číselnou část, můžete to provést pomocí níže uvedeného kódu:
Funkce GetNumeric (CellRef jako řetězec) Dim StringLength jako celé číslo StringLength = Len (CellRef) Pro i = 1 až StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Funkce ukončení výsledku
Tento kód vytvoří v Excelu vlastní funkci, kterou lze použít v listu (stejně jako běžná funkce).
Kam vložit kód VBA?
Zajímá vás, kam jde kód VBA do vašeho sešitu v Excelu?
Excel má VBA backend nazvaný VB editor. Musíte zkopírovat a vložit kód do okna kódu modulu VB Editor.
Zde jsou kroky, jak toho dosáhnout:
- Přejděte na kartu Vývojář.
- Klikněte na možnost Visual Basic. Tím se otevře editor VB v backendu.
- V podokně Průzkumník projektů v editoru VB klikněte pravým tlačítkem na libovolný objekt sešitu, do kterého chcete vložit kód. Pokud Průzkumníka nevidíte, přejděte na kartu Zobrazit a klikněte na Průzkumník projektů.
- Přejděte na Vložit a klikněte na Modul. Tím se vloží objekt modulu pro váš sešit.
- Zkopírujte a vložte kód do okna modulu.