Ovaj vodič će objasniti kako koristiti IIF u VBA
VBA IIF funkcija slična je korištenju IF funkcije u Excelu. Testira je li uvjet ispunjen, vraća jednu vrijednost (ili izračun) ako je TRUE, drugu vrijednost (ili izračun) ako je FALSE.
Sličan je VBA If izjavi, mnogi ga smatraju prečacem za korištenje ove metode jer trebate napisati samo jedan redak koda da biste dobili željeni rezultat, a ne pomoću Ako … Tada … U suprotnom … Prekini Ako rutina. Međutim, potrebno ga je pravilno koristiti jer može dovesti do problema u vašem kodu.
IIF sintaksa
IFF funkcija sastoji se od 3 dijela - logičkog testa, istinitog i lažnog dijela.
- Izraz:Logički test koji će se dogoditi.
- Pravi dio: Rezultat koji će se vratiti ako je logički test TRUE.
- Lažni dio: Rezultat koji će se vratiti ako je logički test FALSE.
Pisanje postupka IIF funkcije
123 | Funkcija GetNames (strName As String) Kao nizGetNames = IIf (strName = "John", "Ime je Ivan", "Ime nije John")Završna funkcija |
U gornjoj funkciji možemo koristiti podproceduru za testiranje da vidimo je li varijabla koju prosljeđujemo funkciji niz "John"
123 | Pod testGetNamaes ()MsgBox GetNames ("Ivan")Kraj podm |
Ako bismo pokrenuli podproceduru TestGetNames, pozvala bi funkciju GetNames i vratila okvir s porukom.
Da smo umjesto toga koristili metodu If, kod bi izgledao ovako:
1234567 | Funkcija GetNames (strName As String) Kao nizAko (strName = "John") TadaGetNames = "Ime je John"DrugoGetNames = "Ime nije John"Završi akoZavršna funkcija |
Učinkovito smo napisali jedan redak koda umjesto 5 redaka koda - impresivno!
Zašto koristiti If umjesto?
Uzmite u obzir sljedeće
123 | Funkcija GetNames (strName As String) Kao nizGetNames = IIf (strName = "John", MsgBox ("Ime je Ivan"), MsgBox ("Ime nije John"))Završna funkcija |
Ako pokrenete sljedeću podproceduru za pozivanje svoje funkcije
123 | Pod TestGetNames ()GetNames ("John")Kraj podm |
Dobili biste isti okvir s porukom kao i prije, ali odmah nakon toga - dobili biste sljedeći okvir s porukom!
IIF funkcija izvršava i TRUE i FALSE odjeljke retka koda - ne napušta kôd kada utvrdi da je uvjet istinit - i dalje izvršava lažni odjeljak - dajući nam lažnu poruku u drugi okvir za poruke. Da ste koristiliAko… Onda… U suprotnom… Prekinite Ako - to se ne bi dogodilo - IF funkcija izvršava samo dio TRUE ili FALSE koda - ovisno o logici koja se prenosi kodu.
Kôd je loše dizajniran (namjerno!) S okvirima za poruke koji se drže unutar retka koda na kojem je IIF izraz, a ne nakon koda ili u potprogramu. Kako IIF funkcija izvodi i TRUE i FALSE odjeljke izraza, obje se poruke vraćaju.
Ovu bismo pogrešku mogli popraviti pomicanjem okvira s porukom ispod reda funkcije IIF, kao u donjem kodu, ili premještanjem okvira s porukom u potpostupak prema prvom primjeru u ovom članku.
1234 | Funkcija GetNames (strName As String) Kao nizGetNames = IIf (strName = "John", "Ime je Ivan", "Ime nije John")MsgBox (GetNames)Završna funkcija |
Ako ste oprezni pri pisanju koda, funkcija IIF može vam uštedjeti mnogo redova koda i dodatno upisivanje!
Ugniježđene IIF -ove
Funkciju IIF možemo ugnijezditi na sličan način kao i funkciju IF, ali još jednom se sve radi u jednom retku.
123 | Funkcija GetDiscount (dblPrice As Double) Kao DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Završna funkcija |
Ovu bismo funkciju tada mogli pozvati iz potprocedure
12345 | Sub FindDiscount ()Priguši dblP kao dvostrukodblP = 899MsgBox ("Popust koji možete ostvariti je" & GetDiscount (dblP) & "%")Kraj podm |
ili ga možete nazvati iz programa Excel, koristeći ga kao UDF (korisnički definirana funkcija)