VBA IIF funkcija

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)

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave