Tento tutoriál vysvětlí, jak používat IIF ve VBA
Funkce VBA IIF je podobná použití funkce IF v aplikaci Excel. Testuje, zda je splněna podmínka, vrací jednu hodnotu (nebo výpočet), je -li PRAVDA, jinou hodnotu (nebo výpočet), pokud je NEPRAVDA.
Je to podobné prohlášení VBA If, mnozí to považují za zkratku k použití této metody, protože stačí pouze napsat jeden řádek kódu, abyste získali požadovaný výsledek, a nikoli pomocí Pokud … Pak … Jinak … Konec Pokud rutina. Musí však být použit správně, protože může vést k problémům ve vašem kódu.
Syntaxe IIF
Funkce IFF se skládá ze 3 částí - logického testu, pravdivé části a falešné části.
- Výraz:Logický test, který má proběhnout.
- Pravá část: Výsledek, který bude vrácen, pokud je logický test PRAVDA.
- Falešná část: Výsledek, který bude vrácen, pokud je logický test NEPRAVDA.
Zápis postupu funkce IIF
123 | Funkce GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Jméno je John", "Jméno není John")Koncová funkce |
Ve výše uvedené funkci můžeme pomocí dílčího postupu otestovat, zda proměnná, kterou funkci předáváme, je řetězec „John“
123 | Dílčí testGetNamaes ()MsgBox GetNames ("John")End Sub |
Pokud bychom spustili dílčí proceduru TestGetNames, zavolala by funkci GetNames a vrátila by okno se zprávou.
Pokud bychom místo toho použili metodu If, kód by vypadal takto:
1234567 | Funkce GetNames (strName As String) As StringIf (strName = "John") ThenGetNames = "Jmenuje se John"JinýGetNames = "Jméno není John"Konec IfKoncová funkce |
Účinně jsme místo 5 řádků kódu napsali jeden řádek kódu - působivé!
Proč místo toho použít If?
Zvažte následující
123 | Funkce GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("Jméno je John"), MsgBox ("Jméno není John"))Koncová funkce |
Nyní, když spustíte následující dílčí postup pro volání vaší funkce
123 | Dílčí testovací názvy ()GetNames („John“)End Sub |
Dostali byste stejné pole se zprávou jako dříve, ale hned poté - dostali byste další pole se zprávou!
Funkce IIF spouští jak PRAVDIVÉ, tak NEPRAVDIVÉ sekce řádku kódu - neopustí kód, jakmile zjistí, že podmínka je pravdivá - stejně provede falešnou sekci - čímž nám poskytne falešnou zprávu v druhé pole se zprávou. Pokud jste použiliPokud … Pak … Jinak … Konec Pokud - k tomu by nedošlo - funkce IF provede pouze část TRUE nebo FALSE kódu - v závislosti na logice předávané kódu.
Kód je špatně navržen (schválně!) Se schránkami zpráv drženými v řádku kódu, na kterém je příkaz IIF, nikoli za kódem, nebo v dílčí rutině. Jelikož funkce IIF spouští části TRUE i FALSE příkazu, jsou vráceny obě zprávy.
Tuto chybu bychom mohli opravit přesunutím pole se zprávou pod funkční řádek IIF, jako v níže uvedeném kódu, nebo přesunutím pole zpráv do dílčího postupu podle prvního příkladu v tomto článku.
1234 | Funkce GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Jméno je John", "Jméno není John")MsgBox (GetNames)Koncová funkce |
Pokud jste při psaní kódu opatrní, funkce IIF vám může ušetřit spoustu řádků kódu a další psaní!
Vnořené IIF
Můžeme vnořit funkci IIF podobným způsobem jako vnoření funkce IF, ale opět je vše provedeno v jednom řádku.
123 | Funkce GetDiscount (dblCena jako dvojnásobek) jako dvojnásobekGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Koncová funkce |
Tuto funkci bychom pak mohli nazvat z dílčí procedury
12345 | Sub FindDiscount ()Dim dblP jako dvojitýdblP = 899MsgBox („Sleva, kterou můžete získat, je“ & GetDiscount (dblP) & „%“)End Sub |
nebo jej můžete zavolat z Excelu pomocí UDF (funkce definovaná uživatelem)