Tento tutoriál vysvetlí, ako používať IIF vo VBA
Funkcia VBA IIF je podobná funkcii IF v programe Excel. Testuje, či je splnená podmienka, pričom vráti jednu hodnotu (alebo výpočet), ak je PRAVDA, inú hodnotu (alebo výpočet), ak je NEPRAVDA.
Je to podobné vyhláseniu VBA If, mnohí to považujú za skratku k použitiu tejto metódy, pretože na získanie požadovaného výsledku stačí napísať iba jeden riadok kódu, a nie Ak … Potom … Inak … Koniec Ak rutina. Musí sa však používať správne, pretože to môže viesť k problémom vo vašom kóde.
IIF syntax
Funkcia IFF sa skladá z 3 častí - logického testu, pravdivej časti a falošnej časti.
- Výraz:Logický test, ktorý sa má uskutočniť.
- Pravdivá časť: Výsledok, ktorý bude vrátený, ak je logický test PRAVDA.
- Falošná časť: Výsledok, ktorý bude vrátený, ak je logický test FALSE.
Napísanie postupu funkcie IIF
123 | Funkcia GetNames (strName As String) Ako reťazecGetNames = IIf (strName = "John", "Meno je John", "Meno nie je John")Koncová funkcia |
Vo vyššie uvedenej funkcii môžeme pomocou čiastkového postupu otestovať, či premenná, ktorú funkcii odovzdáme, je reťazec „John“
123 | Sub TestGetNamaes ()MsgBox GetNames ("John")Koniec pod |
Ak by sme spustili čiastkový postup TestGetNames, zavolal by funkciu GetNames a vrátil by okno so správou.
Ak by sme namiesto toho použili metódu If, kód by vyzeral takto:
1234567 | Funkcia GetNames (strName As String) Ako reťazecIf (strName = "John") PotomGetNames = "Volá sa John"InakGetNames = "Meno nie je John"Koniec AkKoncová funkcia |
Účinne sme napísali jeden riadok kódu namiesto 5 riadkov kódu - pôsobivé!
Prečo namiesto toho použiť nástroj If?
Zvážte nasledujúce
123 | Funkcia GetNames (strName As String) Ako reťazecGetNames = IIf (strName = "John", MsgBox ("Meno je John"), MsgBox ("Meno nie je John"))Koncová funkcia |
Teraz, ak na vyvolanie svojej funkcie spustíte nasledujúci čiastkový postup
123 | Sub TestGetNames ()GetNames („John“)Koniec pod |
Dostali by ste rovnaké pole so správou ako predtým, ale potom bezprostredne potom - dostali by ste ďalšie pole so správami!
Funkcia IIF vykoná v riadku kódu TRUE aj FALSE sekciu - neukončí kód, akonáhle zistí, že podmienka je pravdivá - stále vykoná aj falošnú sekciu - čím nám poskytne falošnú správu v druhé pole so správou. Ak ste použiliAk … Potom … Inak … Koniec Ak - to by sa nestalo - funkcia IF vykoná iba časť TRUE alebo FALSE kódu - v závislosti od logiky prenášanej do kódu.
Kód je zle navrhnutý (účelovo!) So schránkami správ držanými v riadku kódu, na ktorom je príkaz IIF, a nie za kódom alebo v sub-rutine. Pretože funkcia IIF spúšťa TRUE aj FALSE sekcie príkazu, vrátia sa obe správy.
Túto chybu by sme mohli opraviť presunutím poľa so správou pod funkčný riadok IIF, ako je to v nižšie uvedenom kóde, alebo presunutím poľa so správou do čiastkového postupu podľa prvého príkladu v tomto článku.
1234 | Funkcia GetNames (strName As String) Ako reťazecGetNames = IIf (strName = "John", "Meno je John", "Meno nie je John")MsgBox (GetNames)Koncová funkcia |
Ak ste pri písaní kódu opatrní, funkcia IIF vám môže ušetriť veľa riadkov kódu a ďalšie písanie!
Vnorené IIF
Funkciu IIF môžeme vnoriť podobným spôsobom ako vnorenie funkcie IF, ale opäť sa všetko robí v jednom riadku.
123 | Funkcia GetDiscount (dblCena ako dvojnásobok) ako dvojnásobokZískať zľavu = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Koncová funkcia |
Túto funkciu by sme potom mohli nazvať z čiastkového postupu
12345 | Sub Find FindDiscount ()Dim dblP ako dvojitýdblP = 899MsgBox („Zľava, ktorú môžete získať, je“ & GetDiscount (dblP) & „%“)Koniec pod |
alebo to môžete nazvať z Excelu a použiť to ako funkciu definovanú používateľom (UDF)