Funkcija VBA IIF

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)

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave