Funkcia VBA IIF

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)

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave