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:
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í:
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.