Funkce VBA IIF

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)

wave wave wave wave wave