See õpetus selgitab, kuidas IIF -i VBA -s kasutada
Funktsioon VBA IIF sarnaneb funktsiooni IF kasutamisega Excelis. See kontrollib, kas tingimus on täidetud, tagastades ühe väärtuse (või arvutuse), kui see on tõene, teise väärtuse (või arvutuse), kui see on vale.
See on sarnane VBA Ifi avaldusega, paljud peavad seda meetodit otseteeks, kuna soovitud tulemuse saamiseks peate kirjutama ainult ühe koodirida, mitte kasutama Kui… Siis… Muu… Lõpp Kui rutiin. Seda tuleb siiski õigesti kasutada, kuna see võib põhjustada probleeme teie koodis.
IIF süntaks
Funktsioon IFF koosneb kolmest osast - loogiline test, tõeline osa ja vale osa.
- Väljend:Loogiline test, mis toimub.
- Tõeline osa: Tulemus, mis tagastatakse, kui loogiline test on TÕENE.
- Vale osa: Tulemus, mis tagastatakse, kui loogiline test on VÄÄR.
IIF -i funktsiooniprotseduuri kirjutamine
123 | Funktsioon GetNames (strName As String) StringinaGetNames = IIf (strName = "John", "Nimi on John", "Nimi ei ole John")Lõppfunktsioon |
Ülaltoodud funktsioonis saame kasutada alamprotseduuri, et testida, kas funktsioonile edastatav muutuja on string “John”
123 | Sub TestGetNamaes ()MsgBox GetNames ("John")End Sub |
Kui me käivitaksime TestGetNames alamprotseduuri, kutsuks see funktsiooni GetNames ja tagastab sõnumikasti.
Kui oleksime selle asemel kasutanud meetodit If, näeks kood välja selline:
1234567 | Funktsioon GetNames (strName As String) StringinaKui (strName = "John") SiisGetNames = "Nimi on John"MuiduGetNames = "Nimi pole John"Lõpp KuiLõppfunktsioon |
Oleme efektiivselt kirjutanud ühe koodirida 5 koodirida asemel - muljetavaldav!
Miks kasutada selle asemel?
Kaaluge järgmist
123 | Funktsioon GetNames (strName As String) StringinaGetNames = IIf (strName = "John", MsgBox ("Nimi on John"), MsgBox ("Nimi ei ole John"))Lõppfunktsioon |
Nüüd, kui käivitate oma funktsiooni kutsumiseks järgmise alamprotseduuri
123 | Sub TestGetNames ()GetNames ("John")End Sub |
Saaksid sama sõnumikasti nagu varem, kuid siis kohe pärast seda - sa saad järgmise sõnumikasti!
Funktsioon IIF täidab koodirida jaotisi TRUE ja FALSE - see ei välju koodist, kui on leidnud, et tingimus on tõene - täidab endiselt ka vale sektsiooni - andes seega meile vale sõnumi teine sõnumikast. Kui oleksite kasutanudKui… Siis… Muu… Lõpp Kui - seda poleks juhtunud - IF -funktsioon täidab ainult koodi jaotist TRUE või FALSE - sõltuvalt koodile edastatavast loogikast.
Kood on halvasti konstrueeritud (meelega!), Kusjuures sõnumikastid hoitakse selle koodirea sees, millel IIF-lause on sisse lülitatud, mitte pärast koodi või alamrutiini. Kuna funktsioon IIF käivitab avalduse jaotised TRUE ja FALSE, tagastatakse mõlemad teated.
Selle vea saame parandada, teisaldades sõnumikasti funktsioonirida IIF alla, nagu allolevas koodis, või teisaldades sõnumikasti alamprotseduurile vastavalt käesoleva artikli esimesele näitele.
1234 | Funktsioon GetNames (strName As String) StringinaGetNames = IIf (strName = "John", "Nimi on John", "Nimi ei ole John")MsgBox (GetNames)Lõppfunktsioon |
Kui olete koodi kirjutamisel ettevaatlik, võib IIF -funktsioon säästa palju koodiridu ja täiendavat tippimist!
Pesastatud IIF -id
Me võime IIF -i funktsiooni pesastada sarnaselt IF -funktsiooni pesastamisega, kuid jällegi tehakse kõik ühes reas.
123 | Funktsioon GetDiscount (dblPrice As Double) Nagu DoubleGetDiscount = IIf (dblHind> = 500, 10, IIf (dblHind> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Lõppfunktsioon |
Seejärel võiksime seda funktsiooni nimetada alamprotseduurist
12345 | Sub FindDiscount ()Dim dblP KahekordnedblP = 899MsgBox ("Soodustus, mida saate saada" & GetDiscount (dblP) & "%")End Sub |
või võite helistada sellele Excelist, kasutades seda UDF -ina (kasutaja määratud funktsioon)