Príkaz If Then Else v programe Excel VBA (vysvetlené s príkladmi)

V Exceli VBA vám príkaz IF Then Else umožňuje skontrolovať stav a podľa toho vykonať akciu.

To je v mnohých situáciách mimoriadne cenné, ako uvidíme v príkladoch ďalej v tomto návode.

Na jednoduchom príklade predpokladajme, že máte zoznam známok v programe Excel a chcete zvýrazniť všetkých študentov, ktorí získali známku A. Teraz, ak vás požiadam, aby ste to urobili ručne, skontrolujete známku každého študenta a či je A A, zvýrazníte to, a ak nie, necháte to tak.

Rovnakú logiku je možné vytvoriť aj vo VBA pomocou Ak Potom Else aj vyhlásenie (a samozrejme urobte oveľa viac, než len zvýrazňovaním známok).

V tomto tutoriále vám ukážem rôzne spôsoby, ako možno konštrukciu „If Then Else“ použiť v programe Excel VBA, a niekoľko praktických príkladov v praxi.

Ale skôr, ako sa dostanem k podrobnostiam, dovoľte mi uviesť syntax vyhlásenia „IF Then Else“.

Ak máte záujem naučiť sa VBA jednoduchým spôsobom, pozrite sa na moje Online školenie Excel VBA.

Syntax - AK potom inak

Nasleduje generická syntax konštrukcie If Then Else vo VBA

Podmienka IF Potom true_code [Else false_code]

Alebo

Podmienka IF Potom true_code Ostatné false_code Koniec IF

Upozorňujeme, že iná časť tohto vyhlásenia je voliteľná.

Ak vás zaujíma, aký je rozdiel medzi týmito dvoma syntaxami, dovoľte mi to objasniť.

Prvá syntax je jednoduchý jednoriadkový príkaz IF THEN ELSE, kde nepotrebujete použiť príkaz END IF.

V druhej syntaxi je však časť true_code v druhom riadku. Toto je užitočné vtedy, ak je kód, ktorý potrebujete spustiť v prípade, že je podmienka IF pravdivá, dlhý a pozostáva z viacerých riadkov.

Keď rozdelíte príkaz IF do viacerých riadkov, musíte VBA povedať, kde sa konštrukcia IF Then končí.

Preto musíte použiť príkaz End IF.

V prípade, že v prípade potreby nepoužijete End IF, VBA vám zobrazí chybu - „Blokovať IF bez END IF“

Príklady použitia vyhlásenia IF Then vo VBA

Aby ste mali predstavu o tom, ako vyhlásenie IF-THEN funguje vo VBA, začnem niekoľkými základnými príkladmi (niekoľko praktických a užitočnejších príkladov nájdete v tomto návode neskôr).

Predpokladajme, že máte študentské skóre v bunke A1 a chcete skontrolovať, či študent úspešne zvládol skúšku (prahová známka je 35).

Potom môžete použiť nasledujúci kód:

Sub CheckScore () Ak je rozsah („A1“). Hodnota> = 35 Potom MsgBox „prejde“ End Sub

Vyššie uvedený kód má jeden riadok príkazu IF, ktorý kontroluje hodnotu v bunke A1.

Ak je to viac ako 35, zobrazí sa správa - „Pass“.

Ak je menej ako 35, nič sa nestane.

Ale čo keď chcete v oboch prípadoch ukázať správu, či študent úspešne zvládol alebo neprospel.

Nasledujúci kód by to urobil:

Sub CheckScore () If Range ("A1"). Hodnota> = 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

Vyššie uvedený kód používa príkaz IF a ELSE na vykonanie dvoch rôznych podmienok. Keď je skóre viac ako (alebo rovné) 35, podmienka IF je pravdivá a spustí sa kód priamo pod ním (všetko pred príkazom Else).

Ale keď je podmienka IF FALSE, kód skočí do Else časti a spustí v nej blok kódu.

Všimnite si toho, že keď použijeme jeden riadok príkazu IF Then, nemusíme použiť End IF. Keď ho ale rozdelíme na viac ako jeden riadok, musíme použiť príkaz End If.

Vnorené IF Then (viac príkazov IF Then)

Doteraz sme použili jediný príkaz IF Then.

V prípade, že máte na kontrolu viacero podmienok, môžete použiť:

  • Viacnásobné podmienky IF
  • Príkaz If Then Else
  • IF Then ElseIf Else zostrojte

Ukážem vám, ako sa tieto rozdiely líšia a ako ich použiť v programe Excel VBA.

Viacnásobné vyhlásenia IF Then

Zoberme si rovnaký príklad použitia študentských skóre.

Ak študent skóruje menej ako 35, správa, ktorá sa má zobraziť, je „Neúspešná“, ak je skóre rovné alebo vyššie ako 35, správa, ktorá sa má zobraziť, je „úspešná“.

Na to môžeme použiť nasledujúci kód:

Sub CheckScore () Ak je rozsah („A1“). Hodnota = 35 Potom MsgBox „Pass“ End Sub

Môžete použiť viacnásobný príkaz IF Then, ako je uvedené vyššie. Aj keď to funguje, nie je to príklad dobrého kódovania (ako uvidíte alternatívy nižšie).

V prípade, že sa to rozhodnete použiť, nezabudnite, že tieto vyhlásenia by mali byť buď nezávislé, alebo sa navzájom vylučovať. Tu je dôležité vedieť, že vo vyššie uvedenom konštrukte sa vyhodnotia všetky príkazy IF a v prípade, že je podmienka splnená, sa vykoná kód.

Aj keby bol prvý výrok IF správny, druhý by však bol vyhodnotený.

IF Then Else Statement

Predpokladajme, že tentoraz namiesto zobrazenia správy Pass/Fail máme ešte jednu podmienku.

Ak študent skóruje menej ako 35, správa, ktorá sa má zobraziť, je „Neúspešná“, ak je skóre vyššie alebo rovné 35, správa, ktorá sa má zobraziť, je „úspešná“ a ak je skóre viac ako 80, zobrazí sa správa je „Pass, with Distinction“.

Na to môžeme použiť nasledujúci 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

Vo vyššie uvedenom kóde sme použili viacero príkazov IF (vnorených IF Then) pomocou Else.

Existuje teda konštrukcia „IF Then Else“ v rámci konštrukcie „IF Then Else“. Tento typ vnorenia vám umožňuje skontrolovať viac podmienok a spustiť príslušný blok kódu.

IF Then ElseIf Else Vyhlásenie

Vyššie uvedený kód (ktorý sme videli v predchádzajúcej časti) je možné ďalej optimalizovať pomocou príkazu ElseIf.

Pokúšame sa o to - Ak študent dosiahne skóre menej ako 35, správa, ktorá sa má zobraziť, je „Neúspešný“, ak je skóre viac ako alebo rovné 35, zobrazí sa správa „Úspešne“ a ak skóre je viac ako 80, zobrazí sa sprá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

Vyššie uvedený kód používa ElseIf, ktorý nám umožňuje udržať všetky podmienky v rámci jedného príkazu IF Then.

Použitie A a ALEBO v IF Potom Ostatné

V tomto návode sme zatiaľ skontrolovali iba jednu podmienku naraz.

Ak však máte viacero závislých podmienok, môžete s podmienkami IF použiť príkaz AND alebo OR.

Nasleduje syntax použitia podmienky AND/OR s príkazom IF Then.

AK Podmienka1 A Podmienka2 Potom true_code Ostatné false_code Koniec IF

Vo vyššie uvedenom kóde sa spustí true_code iba vtedy, ak sú splnené Podmienky1 aj Podmienky2. Aj keď je jedna z podmienok nepravdivá, vykoná príkaz false_code.

S OR, aj keď je splnená jedna z podmienok, vykoná true_code. Iba vtedy, ak sú všetky podmienky nepravdivé, vykoná parameter false_code.

Teraz sa pozrime, ako príkaz AND a OR funguje s konštrukciou IF Then Else.

Predpokladajme, že máte skóre z dvoch predmetov namiesto jedného a chcete skontrolovať nasledujúce podmienky:

  • Zlyhať - Keď je skóre nižšie ako 35 v ktoromkoľvek z predmetov.
  • Pass - Keď je skóre vyššie alebo rovné 35, ale menej ako 80 u oboch predmetov.
  • Pass, with Distinction - Keď je skóre vyššie ako 35 u oboch subjektov a je vyššie alebo rovné 80 u jedného alebo oboch subjektov.

Tu je kód, ktorý to urobí:

Sub CheckScore () If Range ("A1"). Hodnota <35 or Range ("B1"). Hodnota <35 Then MsgBox "Fail" ElseIf Range ("A1"). Hodnota <80 And Range ("B1"). Hodnota <80 potom MsgBox „prejde“, inak prejde MsgBox „prejde, s rozlíšením“ End If End Sub

Vyššie uvedený kód používa príkazy ALEBO A AND.

Tento istý kód môžete napísať aj s miernou zmenou (pomocou OR namiesto AND).

Sub CheckScore () If Range ("A1"). Hodnota <35 Or Range ("B1"). Value 80 or Range ("B1"). Value> 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End Ak End Sub

Oba vyššie uvedené kódy VBA vám poskytnú rovnaký výsledok. Osobne preferujem prvý, pretože má logický priebeh kontroly skóre (ale to som len ja).

Použitie Nie je rovnaké ako v prípade Potom

Vo všetkých vyššie uvedených príkladoch sme použili podmienky, ktoré kontrolujú, či sa hodnota rovná špecifikovanej hodnote alebo nie.

Podobné kódy môžete použiť aj pri kontrole, keď sa hodnota nerovná zadanej hodnote v kóde VBA. Nie je to rovnaké ako v programe Excel VBA.

Ak chcete vidieť praktický príklad použitia, pozrite sa na príklad 1 nižšie.

Použitie If Then Else so slučkami vo VBA

Doteraz sme prešli niekoľkými príkladmi, ktoré je dobré pochopiť, ako fungujú vyhlásenia „IF-THEN“ vo VBA, ale v praktickom svete nie sú užitočné.

Ak potrebujem hodnotiť študentov, ľahko to urobím pomocou funkcií Excelu.

Pozrime sa teda na niekoľko užitočných a praktických príkladov, ktoré vám môžu pomôcť automatizovať niektoré veci a byť efektívnejšie.

Príklad 1 - Uložte a zatvorte všetky zošity okrem aktívneho zošita

Ak máte otvorených veľa zošitov a rýchlo chcete zavrieť všetky okrem aktívneho zošita, môžete použiť nasledujúci 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 close If Next wb End Sub

Vyššie uvedený kód by uložil a zatvoril všetky zošity (okrem aktívneho).

Pomocou slučky For Next prechádza zbierkou všetkých otvorených zošitov a kontroluje názov pomocou podmienky IF.

Ak názov nie je rovnaký ako názov aktívneho zošita, uloží ho a zatvorí.

V prípade, že je v niektorom zošite kód VBA a neuložili ste ho ako .xls alebo .xlsm, zobrazí sa varovanie (pretože kódy vba sa stratia, keď ho uložíte vo formáte .xlsx).

Príklad 2 - Zvýraznite bunky s negatívnymi hodnotami

Predpokladajme, že máte stĺpec plný čísel a chcete rýchlo zvýrazniť všetky bunky so zápornými hodnotami červenou farbou, môžete to urobiť pomocou nižšie 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

Vyššie uvedený kód používa slučku For Every a kontroluje každú bunku vo výbere, ktorý ste urobili. Ak má bunka zápornú hodnotu, je zvýraznená červenou farbou s bielou farbou písma.

Príklad 3 - Skryť všetok pracovný hárok okrem aktuálneho pracovného hárka

V prípade, že chcete rýchlo skryť všetky pracovné hárky okrem aktívneho, môžete použiť nasledujúci kód:

Sub HideAllExceptActiveSheet () Dim ws as worksheet for each ws in ThisWorkbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

Vyššie uvedený kód používa slučku For Each na prechádzanie zbierkou pracovných hárkov. Skontroluje názov každého pracovného hárka a skryje ho, ak nejde o aktívny pracovný hárok.

Príklad 4 - Extrahujte číselnú časť z alfanumerického reťazca

Ak máte v bunkách alfanumerické reťazce a chcete z nich extrahovať numerickú časť, môžete to urobiť pomocou nižšie uvedeného kódu:

Funkcia GetNumeric (CellRef ako reťazec) Dim StringLength ako celé číslo StringLength = Len (CellRef) For i = 1 až StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Funkcia ukončenia výsledku

Tento kód vytvorí v programe Excel vlastnú funkciu, ktorú je možné použiť v pracovnom hárku (rovnako ako bežná funkcia).

Kam vložiť kód VBA?

Zaujíma vás, kam smeruje kód VBA vo vašom zošite programu Excel?

Excel má VBA backend nazývaný VB editor. Kód musíte skopírovať a vložiť do okna kódu modulu VB Editor.

Tu sú kroky, ako to urobiť:

  1. Prejdite na kartu Vývojár.
  2. Kliknite na možnosť Visual Basic. Tým sa otvorí editor VB v backende.
  3. Na table Project Explorer v editore VB kliknite pravým tlačidlom myši na ľubovoľný objekt zošita, do ktorého chcete vložiť kód. Ak sa Project Explorer nezobrazuje, choďte na kartu Zobraziť a kliknite na Project Explorer.
  4. Prejdite na položku Vložiť a kliknite na modul. Tým sa vloží objekt modulu do vášho zošita.
  5. Skopírujte a prilepte kód do okna modulu.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave