Ta vadnica bo razložila, kako uporabljati IIF v VBA
Funkcija VBA IIF je podobna uporabi funkcije IF v Excelu. Testira, ali je pogoj izpolnjen, vrne eno vrednost (ali izračun), če je TRUE, drugo vrednost (ali izračun), če je FALSE.
Podobno je izjavi VBA If, mnogi menijo, da je bližnjica do uporabe te metode, saj morate za dosego želenega rezultata napisati samo eno vrstico kode, namesto da uporabite Če… Potem… Drugače… Konec Če rutina. Vendar ga je treba pravilno uporabiti, saj lahko povzroči težave v kodi.
Sintaksa IIF
Funkcija IFF je sestavljena iz treh delov - logičnega testa, pravega dela in napačnega dela.
- Izraz:Logični preizkus, ki se bo zgodil.
- Pravi del: Rezultat, ki bo vrnjen, če je logični test TRUE.
- Lažni del: Rezultat, ki bo vrnjen, če je logični test FALSE.
Pisanje postopka funkcije IIF
123 | Funkcija GetNames (strName As String) Kot StringGetNames = IIf (strName = "John", "Ime je John", "Ime ni John")Končana funkcija |
V zgornji funkciji lahko s podproceduro preizkusimo, ali je spremenljivka, ki jo posredujemo funkciji, niz »John«
123 | Sub TestGetNamaes ()MsgBox GetNames ("John")End Sub |
Če bi zagnali pod-postopek TestGetNames, bi poklical funkcijo GetNames in vrnil polje s sporočilom.
Če bi namesto tega uporabili metodo If, bi bila koda videti tako:
1234567 | Funkcija GetNames (strName As String) Kot StringČe (strName = "John") PotemGetNames = "Ime je John"Sicer paGetNames = "Ime ni John"Konec ČeKončana funkcija |
Učinkovito smo napisali eno vrstico kode namesto 5 vrstic kode - impresivno!
Zakaj uporabljati namesto tega?
Upoštevajte naslednje
123 | Funkcija GetNames (strName As String) Kot StringGetNames = IIf (strName = "John", MsgBox ("Ime je John"), MsgBox ("Ime ni John"))Končana funkcija |
Zdaj, če želite zaklicati svojo funkcijo po naslednjem podproceduri
123 | Sub TestGetNames ()GetNames ("John")End Sub |
Dobili bi isto polje za sporočila kot prej, potem pa takoj za tem - dobili bi naslednje polje za sporočila!
Funkcija IIF izvaja odseke TRUE in FALSE v vrstici kode - kode ne zapušča, ko ugotovi, da je pogoj resničen - še vedno izvaja tudi lažni del - tako nam pošlje lažno sporočilo drugo polje za sporočila. Če bi uporabiliČe… Potem… Drugače… Konec Če - do tega ne bi prišlo - funkcija IF izvede samo del TRUE ali FALSE kode - odvisno od logike, ki se posreduje kodi.
Koda je slabo zasnovana (namerno!), Pri čemer so polja za sporočila v vrstici kode, na kateri je stavek IIF, namesto po kodi ali v podprogramu. Ker funkcija IIF izvaja tako razdelke TRUE kot FALSE izjave, se vrneta oba sporočila.
To napako bi lahko odpravili s premikanjem okna s sporočilom pod funkcijsko vrstico IIF, kot je prikazano v spodnji kodi, ali s premikanjem polja s sporočilom v podproceduro v skladu s prvim primerom v tem članku.
1234 | Funkcija GetNames (strName As String) Kot StringGetNames = IIf (strName = "John", "Ime je John", "Ime ni John")MsgBox (GetNames)Končana funkcija |
Če ste previdni pri pisanju kode, vam lahko funkcija IIF prihrani veliko vrstic kode in dodatno tipkanje!
Ugnezdene IIF
Funkcijo IIF lahko ugnezdimo na podoben način kot gnezdenje funkcije IF, vendar je spet vse narejeno v eni vrstici.
123 | Funkcija GetDiscount (dblPrice As Double) Kot DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Končana funkcija |
To funkcijo bi lahko nato poklicali iz podprocedure
12345 | Sub FindDiscount ()Zatemni dblP kot dvojnodblP = 899MsgBox ("Popust, ki ga lahko pridobite, je" & GetDiscount (dblP) & "%")End Sub |
ali pa ga lahko pokličete iz Excela in ga uporabite kot UDF (uporabniško določena funkcija)