Funktsioon VBA IIF

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)

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave