VBA If, ElseIf, Else (Ultimate Guide to If Statements)

Prohlášení VBA

Pokud Pak

VBA If Statements vám umožňují otestovat, zda jsou výrazy PRAVDA nebo NEPRAVDA, spuštěním jiného kódu na základě výsledků.Podívejme se na jednoduchý příklad:
1 Pokud je rozsah („a2“). Hodnota> 0, pak rozsah („b2“). Hodnota = „pozitivní“
Testuje se, zda je hodnota v rozsahu A2 větší než 0. Pokud ano, nastavení rozsahu B2 se rovná „pozitivní“Poznámka: Při testování podmínek použijeme operátory porovnání =,>, <,, =. Podrobněji je probereme později v článku.Zde je syntaxe jednoduchého jednořádkového příkazu If:
1 Pokud [výraz_testu], pak [akce]
Aby bylo čtení snazší, můžete pomocí znaku Pokračování řádku (podtržítko) rozbalit příkazy If na dva řádky (jako jsme to udělali na výše uvedeném obrázku):
12 Pokud [výraz_testu], pak _[akce]
12 Pokud je rozsah („a2“). Hodnota> 0, pak _Rozsah ("b2"). Hodnota = "pozitivní"

Konec If

Výše uvedený příkaz „jednořádkový“ if funguje dobře, když testujete jednu podmínku. Protože se však vaše výpisy IF s několika podmínkami komplikují, budete muset na konec příkazu if přidat „End If“:
123 Pokud Rozsah („a2“). Hodnota> 0 PakRozsah ("b2"). Hodnota = "pozitivní"Konec If

Zde je syntaxe:

123 Pokud [test_expression] pak[akce]Konec If

Konec If znamená konec příkazu if.

Nyní přidáme ElseIF:

ElseIF - více podmínek

ElseIf je přidán do existujícího příkazu If. Jinak Testuje, zda je splněna podmínka POUZE pokud nebyly splněny předchozí podmínky.V předchozím příkladu jsme testovali, zda je hodnota buňky kladná. Nyní také otestujeme, zda je hodnota buňky záporná pomocí ElseIf:
12345 Pokud Rozsah („a2“). Hodnota> 0 PakRozsah ("b2"). Hodnota = "pozitivní"Rozsah ElseIf ("a2"). Hodnota <0 PotomRozsah („b2“). Hodnota = „Negativní“Konec If

K testování více podmínek můžete použít více ElseIfů:

1234567891011 Sub If_Multiple_Conditions ()Pokud rozsah („a2“). Hodnota = „Cat“ PakRozsah ("b2"). Hodnota = "Mňau"Rozsah ElseIf („a2“). Hodnota = „Pes“ PotomRozsah ("b2"). Hodnota = "Woof"Jiný rozsah („a2“). Hodnota = „Kachna“Rozsah ("b2"). Hodnota = "Quack"Konec IfEnd Sub

Nyní přidáme příponu Jiný:

Jiný

The Jiný poběží, pokud nebyly splněny žádné další předchozí podmínky.

Náš příklad dokončíme pomocí Else, abychom naznačili, že pokud hodnota buňky není kladná ani záporná, pak musí být nulová:

1234567 Pokud Rozsah („a2“). Hodnota> 0 PakRozsah ("b2"). Hodnota = "pozitivní"Rozsah ElseIf ("a2"). Hodnota <0 PotomRozsah („b2“). Hodnota = „Negativní“JinýRozsah ("b2"). Hodnota = "Nula"Konec If

Pokud-jinak

Nejběžnějším typem příkazu If je jednoduchý příkaz If-Else:

1234567 Sub If_Else ()Pokud Rozsah („a2“). Hodnota> 0 PakRozsah ("b2"). Hodnota = "pozitivní"JinýRozsah („b2“). Hodnota = „Pozitivní“Konec IfEnd Sub

Vnořené IF

Příkazy můžete také „vnořit“ do sebe.

1234567891011 Sub Nested_Ifs ()Pokud Rozsah („a2“). Hodnota> 0 PakRozsah ("b2"). Hodnota = "pozitivní"JinýPokud Rozsah („a2“). Hodnota <0 PotomRozsah („b2“). Hodnota = „Negativní“JinýRozsah ("b2"). Hodnota = "Nula"Konec IfKonec IfEnd Sub

IF - Nebo, A, Xor, ne

Dále budeme diskutovat logické operátory: Nebo, And, Xor, Not.

Já pro

The Nebo operátorské testy, pokud je splněna alespoň jedna podmínka.

Následující kód otestuje, zda je hodnota v rozsahu A2 menší než 5 000 nebo větší než 10 000:

123 Pokud rozsah („a2“). Hodnota 10 000 PakRozsah ("b2"). Hodnota = "Mimo rozsah"Konec If

Do jednoho řádku můžete zahrnout více Ors:

123 Pokud je rozsah („a2“). Hodnota 10 000 nebo rozsah („a2“). Hodnota = 9999 PotomRozsah ("b2"). Hodnota = "Mimo rozsah"Konec If

Pokud se chystáte použít více Ors, doporučujeme použít znak pro pokračování řádku, aby byl váš kód čitelnější:

123456 Pokud je rozsah („a2“). Hodnota <5000 Nebo _Rozsah („a2“). Hodnota> 10 000 nebo _Rozsah ("a2"). Hodnota = 9999 PotomRozsah ("b2"). Hodnota = "Mimo rozsah"Konec If

Pokud And

Operátor And vám umožňuje vyzkoušet, zda VŠECHNY podmínky jsou splněny.

123 Pokud je rozsah („a2“). Hodnota> = 5 000 a rozsah („a2“). Hodnota <= 10 000 PakRozsah ("b2"). Hodnota = "V rozsahu"Konec If

Pokud Xor

Operátor Xor vám umožňuje vyzkoušet, zda je splněna přesně jedna podmínka. Pokud jsou splněny nulové podmínky, Xor vrátí FALSE, pokud jsou splněny dvě nebo více podmínek, Xor také vrátí false.

Málokdy jsem viděl Xora použitého v programování VBA.

Pokud ne

Operátor Not se používá k převodu FALSE na TRUE nebo TRUE na FALSE:

123 Dílčí IF_Not ()MsgBox Not (True)End Sub

Všimněte si, že operátor Not vyžaduje k přepnutí závorky obklopující výraz.

Operátor Not lze použít také na příkazy If:

123 Pokud ne (rozsah („a2“). Hodnota> = 5 000 a rozsah („a2“). Hodnota <= 10 000) PakRozsah ("b2"). Hodnota = "Mimo rozsah"Konec If

Pokud srovnání

Při porovnávání obvykle použijete jeden z operátorů porovnání:

Operátor porovnání Vysvětlení
= Rovná
Nerovná se
> Větší než
>= Větší než nebo rovno
< Méně než
<= Méně než nebo rovno

Můžete však také použít libovolný výraz nebo funkce výsledkem je PRAVDA nebo NEPRAVDA

If - Booleovská funkce

Při vytváření výrazů pro příkazy If můžete také použít libovolnou funkci, která generuje hodnotu TRUE nebo False. VBA má několik z těchto funkcí:

Funkce Popis
IsDate Pokud je výraz platným datem, vrátí hodnotu TRUE
Je prázdný Zkontrolujte prázdné buňky nebo nedefinované proměnné
IsError Zkontrolujte chybové hodnoty
IsNull Zkontrolujte hodnotu NULL
IsNumeric Zkontrolujte číselnou hodnotu

Lze je nazvat takto:

1 If IsEmpty (Range ("A1"). Value) Then MsgBox "Cell Empty"

Excel má také mnoho dalších funkcí, které lze volat pomocí WorksheetFunction. Zde je příklad funkce Excel IsText:

12 Pokud Application.WorksheetFunction.IsText (rozsah ("a2"). Hodnota) Pak _MsgBox „Buňka je text“

Můžete také vytvořit vlastní funkce definované uživatelem (UDF). Níže vytvoříme jednoduchou booleovskou funkci, která vrací TRUE. Potom tuto funkci zavoláme v našem příkazu If:

1234567891011 Sub If_Function ()Pokud TrueFunction PakMsgBox „True“Konec IfEnd SubFunkce TrueFunction () Jako logická hodnotaTrueFunction = TrueKoncová funkce

Porovnání textu

Můžete také porovnávat text podobný porovnávání čísel:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Při porovnávání textu musíte mít na paměti „případ“ (horní nebo dolní). VBA standardně považuje písmena s různými písmeny za neodpovídající. Jinými slovy „A“ „a“.Pokud chcete, aby VBA ignorovala velká a malá písmena, musíte do horní části modulu přidat deklaraci textového porovnání:
1 Možnost Porovnat text

Po prohlášení „A“ = „a“:
12345 Možnost Porovnat textSub if_Text ()MsgBox "a" = "A"End Sub

VBA If Like

Operátor jako VBA vám umožňuje provádět nepřesná srovnání textu. Chcete -li se dozvědět více, klikněte na odkaz „Jako operátor“, ale níže uvedeme základní příklad:

12345678 Dim strName jako řetězecstrName = "Pan Charles"Pokud strName jako „Pan*“ TakMsgBox „True“JinýMsgBox „False“Konec If

Zde používáme zástupný znak s hvězdičkou „*“. Znak * znamená libovolný počet libovolných znaků. Výše uvedený příkaz If tedy vrátí hodnotu TRUE. Operátor Like je extrémně výkonný, ale často málo používaný nástroj pro práci s textem.

Pokud smyčky

Smyčky VBA vám umožňují opakovat akce. Kombinace IF-ELSE se smyčkami je skvělý způsob, jak rychle zpracovat mnoho výpočtů.

Pokračováním našeho pozitivního / negativního příkladu přidáme pro každou smyčku smyčku přes řadu buněk:

1234567891011121314 Sub If_Loop ()Dim Cell jako rozsahPro každou buňku v dosahu („A2: A6“)Pokud Cell.Value> 0 ThenCell.Offset (0, 1) .Value = "Pozitivní"ElseIf Cell.Value <0 PotomCell.Offset (0, 1) .Value = "Negativní"JinýCell.Offset (0, 1) .Value = "Nula"Konec IfDalší buňkaEnd Sub

Pokud Jinak Příklady

Nyní si projdeme několik konkrétnějších příkladů.

Zkontrolujte, zda je buňka prázdná

Tento kód zkontroluje, zda je buňka prázdná. Pokud je prázdný, buňku bude ignorovat. Pokud není prázdné, zobrazí se hodnota buňky v buňce vpravo:
1234567 Sub If_Cell_Empty ()Pokud Rozsah („a2“). Hodnota „„ PotomRozsah ("b2"). Hodnota = rozsah ("a2"). HodnotaKonec IfEnd Sub

Zkontrolujte, zda buňka obsahuje konkrétní text

Funkce Instr testuje, zda je řetězec textu nalezen v jiném řetězci. Pomocí příkazu If zkontrolujte, zda buňka obsahuje konkrétní text:
123 Pokud hodnota Instr (rozsah („A2“)., „Text“)> 0, pakMsgbox „Nalezen text“Konec If

Zkontrolujte, zda buňka obsahuje text

Tento kód otestuje, zda je buňka text:
1234567 Sub If_Cell_Is_Text ()Pokud Application.WorksheetFunction.IsText (rozsah ("a2"). Hodnota) PakMsgBox „Buňka je text“Konec IfEnd Sub

Pokud Jdi

Výsledek příkazu If můžete použít k „Přejít na“ další část kódu.
12345678910 Sub IfGoTo ()If IsError (Cell.value) ThenPřejít přeskočitKonec If„Nějaký kódPřeskočit:End Sub

Pokud je buňka prázdná, odstraňte řádek

Pomocí ifs a smyček můžete vyzkoušet, zda je buňka prázdná, a pokud ano, odstranit celý řádek.
123456789 Dílčí DeleteRowIfCellBlank ()Dim Cell jako rozsahPro každou buňku v dosahu („A2: A10“)Pokud Cell.Value = "" Pak Cell.EntireRow.DeleteDalší buňkaEnd Sub

Pokud MessageBox Ano / Ne

Se schránkami zpráv VBA můžete uživatele požádat, aby si vybral z několika možností. Okno se zprávou Ano / Ne požádá uživatele, aby vybral Ano nebo Ne. Do postupu můžete přidat pole zpráv Ano / Ne a zeptat se uživatele, zda chce v proceduře pokračovat nebo ne. Vstup uživatele zpracováváte pomocí příkazu If.Zde je pole zpráv Ano/Ne v praxi:
123456789101112 Sub MsgBoxVariable ()Dim odpověď jako celé čísloanswer = MsgBox („Chcete pokračovat?“, vbQuestion + vbYesNo)If answer = vbYes ThenMsgBox „Ano“JinýMsgBox „Ne“Konec IfEnd Sub

VBA If, ElseIf, Else in Access VBA

Funkce If, ​​ElseIf a Else fungují v Access VBA úplně stejně jako v Excelu VBA.

Pomocí příkazu If můžete zkontrolovat, zda jsou v sadě záznamů záznamy.

wave wave wave wave wave