VBA IIF funkció

Ez az oktatóanyag elmagyarázza, hogyan kell használni az IIF -et a VBA -ban

A VBA IIF függvény hasonló az Excel IF funkciójához. Ellenőrzi, hogy egy feltétel teljesül -e, és visszaad egy értéket (vagy számítást), ha IGAZ, egy másik értéket (vagy számítást), ha HAMIS.

Hasonló a VBA If utasításhoz, sokan ezt a módszert használják gyorsbillentyűnek, mivel csak egy kódsort kell írnia a kívánt eredmény eléréséhez, nem pedig Ha… Akkor… Más… Vége Ha rutin. Azonban helyesen kell használni, mivel problémákhoz vezethet a kódban.

IIF szintaxis

Az IFF függvény 3 részből áll - a logikai tesztből, az igaz részből és a hamis részből.

  • Kifejezés:A logikai teszt, amelyre sor kerül.
  • Igaz rész: Az eredmény, amely akkor kerül visszaadásra, ha a logikai teszt IGAZ.
  • Hamis rész: Az eredmény, amelyet hamis logikai teszt esetén ad vissza.

IIF függvényeljárás írása

123 Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "János", "A név János", "A név nem János")Vége funkció

A fenti függvényben egy al-eljárással tesztelhetjük, hogy a függvénynek átadott változó a „John” karakterlánc

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

Ha a TestGetNames alfolyamatot futtatnánk, az meghívná a GetNames függvényt, és visszaadna egy üzenetdobozt.

Ha helyette az If metódust használtuk volna, a kód így nézne ki:

1234567 Funkció GetNames (strName As String) StringkéntHa (strName = "John") AkkorGetNames = "A név John"MásGetNames = "A név nem János"Vége HaVége funkció

Valójában egy sor kódot írtunk 5 kódsor helyett - lenyűgöző!

Miért használja az If -t?

Tekintsük a következő

123 Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "John", MsgBox ("A név John"), MsgBox ("A név nem John"))Vége funkció

Most, ha a következő al-eljárást futtatja a függvény meghívásához

123 Sub TestGetNames ()GetNames ("János")End Sub

Ugyanazt az üzenetdobozt kapná, mint korábban, de utána azonnal - a következő üzenetdobozt!

Az IIF függvény végrehajtja a kód sorának IGAZ és HAMIS szakaszát is - nem lép ki a kódból, ha a feltételt igaznak találta - továbbra is végrehajtja a hamis részt is - így hamis üzenetet ad nekünk a második üzenetdoboz. Ha használtad volnaHa… Akkor… Más… Vége Ha - ez nem történt volna meg - az IF függvény csak a kód IGAZ vagy HAMIS szakaszát hajtja végre - attól függően, hogy milyen logikát ad át a kódnak.

A kód rosszul van megtervezve (szándékosan!), Az üzenetdobozokat azon kódsoron belül tartják, amelyen az IIF utasítás található, nem pedig a kód után, vagy az alrutinban. Mivel az IIF függvény az utasítás TRUE és FALSE szakaszát is futtatja, mindkét üzenet visszaküldésre kerül.

Ezt a hibát kijavíthatjuk úgy, hogy az üzenetdobozt az IIF függvénysor alá helyezzük, az alábbi kód szerint, vagy az üzenetdobozt a cikk első példája szerinti al-eljárásra helyezzük át.

1234 Funkció GetNames (strName As String) StringkéntGetNames = IIf (strName = "János", "A név János", "A név nem János")MsgBox (GetNames)Vége funkció

Ha óvatos, amikor kódot ír, az IIF funkció rengeteg kódsort és extra gépelést takaríthat meg!

Beágyazott IIF -ek

Az IIF függvényt az IF függvény beágyazásához hasonló módon fészkelhetjük be, de ismét minden egy sorban történik.

123 Funkció GetDiscount (dblPrice As Double) DuplakéntGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Vége funkció

Ezt a függvényt egy al-eljárásból hívhatjuk meg

12345 Sub FindDiscount ()Dim dblP DuplakéntdblP = 899MsgBox ("Az elérhető kedvezmény" & GetDiscount (dblP) & "%")End Sub

vagy hívhatja Excel -ből, UDF -ként (felhasználó által definiált funkció) használva

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave