VBA IIF -toiminto

Tämä opetusohjelma selittää IIF: n käytön VBA: ssa

VBA IIF -toiminto on samanlainen kuin IF -toiminnon käyttäminen Excelissä. Se testaa, täyttyykö ehto, palauttaa yhden arvon (tai laskelman), jos TOSI, ja toisen arvon (tai laskelman), jos se on EPÄTOSI.

Se on samanlainen kuin VBA If -lauseke, monet pitävät sitä pikavalintana tämän menetelmän käyttämiseen, koska sinun on kirjoitettava vain yksi koodirivi halutun tuloksen saamiseksi sen sijaan, että Jos… Sitten… Muuten… Lopeta Jos rutiinia. Sitä on kuitenkin käytettävä oikein, koska se voi aiheuttaa ongelmia koodissasi.

IIF -syntaksi

IFF -toiminto koostuu kolmesta osasta - looginen testi, oikea osa ja väärä osa.

  • Ilmaisu:Looginen testi, jonka on määrä tapahtua.
  • Tosi osa: Tulos, joka palautetaan, jos looginen testi on TOSI.
  • Väärä osa: Tulos, joka palautetaan, jos looginen testi on EPÄTOSI.

IIF -toimintamenettelyn kirjoittaminen

123 Toiminto GetNames (strName As String) merkkijononaGetNames = IIf (strName = "Johannes", "Nimi on Johannes", "Nimi ei ole Johannes")Lopeta toiminto

Yllä olevassa funktiossa voimme testata alimenettelyn avulla, onko funktiolle välitettävä muuttuja merkkijono "John"

123 AlatestiGetNamaes ()MsgBox GetNames ("John")End Sub

Jos ajaisimme TestGetNames-alimenettelyä, se kutsuisi GetNames-funktion ja palauttaisi viestiruudun.

Jos olisimme käyttäneet If -menetelmää, koodi olisi näyttänyt tältä:

1234567 Toiminto GetNames (strName As String) merkkijononaJos (strName = "John") SittenGetNames = "Nimi on John"MuuGetNames = "Nimi ei ole John"Loppu JosLopeta toiminto

Olemme kirjoittaneet tehokkaasti yhden koodirivin 5 koodirivin sijasta - vaikuttavaa!

Miksi käyttää Jos sen sijaan?

Harkitse seuraavaa

123 Toiminto GetNames (strName As String) merkkijononaGetNames = IIf (strName = "John", MsgBox ("Nimi on John"), MsgBox ("Nimi ei ole John"))Lopeta toiminto

Jos suoritat seuraavan alitoimenpiteen kutsuaksesi toimintoasi

123 Sub TestGetNames ()GetNames ("John")End Sub

Saat saman viestiruudun kuin aiemmin, mutta heti sen jälkeen - saat seuraavan viestiruudun!

IIF -toiminto suorittaa koodirivin osiot TOSI ja EPÄTOSI - se ei poistu koodista, kun se on todennut ehdon oikeaksi - se suorittaa silti myös väärän osan - ja antaa näin toinen viestiruutu. Jos olisit käyttänytJos… Sitten… Muuten… Lopeta Jos - näin ei olisi tapahtunut - IF -funktio suorittaa vain koodin TOSI- tai EPÄTOSI -osion - riippuen koodille välitetystä logiikasta.

Koodi on huonosti suunniteltu (tarkoituksella!), Jossa sanomalaatikot pidetään koodirivillä, jolla IIF-lause on päällä, eikä koodin jälkeen tai alirutiinissa. Koska IIF -toiminto suorittaa lauseen TRUE- ja FALSE -osiot, molemmat viestit palautetaan.

Voimme korjata tämän virheen siirtämällä viestiruudun IIF-toimintorivin alle, kuten alla olevassa koodissa, tai siirtämällä sanomalaatikon tämän menettelyn ensimmäisen esimerkin mukaiseen alimenettelyyn.

1234 Toiminto GetNames (strName As String) merkkijononaGetNames = IIf (strName = "Johannes", "Nimi on Johannes", "Nimi ei ole Johannes")MsgBox (GetNames)Lopeta toiminto

Jos olet varovainen kirjoittaessasi koodia, IIF -toiminto voi säästää paljon koodirivejä ja ylimääräistä kirjoittamista!

Sisäkkäiset IIF: t

Voimme sisäistää IIF -funktion samalla tavalla kuin IF -funktion, mutta jälleen kerran kaikki tehdään yhdellä rivillä.

123 Toiminto GetDiscount (dblPrice As Double) Kuten DoubleGetDiscount = IIf (dblHinta> = 500, 10, IIf (dblHinta> = 250, 5, IIf (dblHinta> = 100, 2,5, 0)))Lopeta toiminto

Voisimme kutsua tämän toiminnon alimenettelystä

12345 Sub FindDiscount ()Dim dblP TuplanadblP = 899MsgBox ("Alennus, jonka voit saada" & GetDiscount (dblP) & "%")End Sub

tai voit kutsua sen Excelistä käyttämällä sitä UDF: nä (User Defined Function)

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave