VBA IIF-functie

Deze tutorial legt uit hoe je IIF in VBA gebruikt

De VBA IIF-functie is vergelijkbaar met het gebruik van de IF-functie in Excel. Het test of aan een voorwaarde is voldaan, waarbij één waarde (of berekening) wordt geretourneerd als WAAR, een andere waarde (of berekening) als ONWAAR.

Het is vergelijkbaar met de VBA If-instructie, velen beschouwen het als een snelkoppeling naar het gebruik van deze methode, omdat u slechts één regel code hoeft te schrijven om het gewenste resultaat te krijgen in plaats van een Als… Dan… Anders… Einde Als routine. Het moet echter correct worden gebruikt, omdat het tot problemen in uw code kan leiden.

IIF-syntaxis

De IFF-functie bestaat uit 3 delen - de logische test, het ware deel en het valse deel.

  • Uitdrukking:De logische test die moet plaatsvinden.
  • waar deel: Het resultaat dat wordt geretourneerd als de logische test WAAR is.
  • Vals deel: Het resultaat dat wordt geretourneerd als de logische test ONWAAR is.

Een IIF-functieprocedure schrijven

123 Functie GetNames(strName As String) As StringGetNames = IIf(strName = "John", "De naam is John", "De naam is niet John")Functie beëindigen

In de bovenstaande functie kunnen we een subprocedure gebruiken om te testen of de variabele die we aan de functie doorgeven de string "John" is

123 SubtestGetNamaes()MsgBox GetNames("John")Einde sub

Als we de subprocedure TestGetNames zouden uitvoeren, zou deze de functie GetNames aanroepen en een berichtvenster retourneren.

Als we in plaats daarvan de If-methode hadden gebruikt, zou de code er als volgt hebben uitgezien:

1234567 Functie GetNames(strName As String) As StringIf(strName = "John") DanGetNames = "De naam is John"AndersGetNames = "De naam is niet John"Stop alsFunctie beëindigen

We hebben effectief één regel code geschreven in plaats van 5 regels code - indrukwekkend!

Waarom If in plaats daarvan gebruiken?

Stel je de volgende situatie voor

123 Functie GetNames(strName As String) As StringGetNames = IIf(strName = "John", MsgBox ("De naam is John"), MsgBox ("De naam is niet John"))Functie beëindigen

Als u nu de volgende subprocedure uitvoert om uw functie aan te roepen:

123 SubtestGetNames()GetNames ("Jan")Einde sub

Je zou hetzelfde berichtvenster krijgen als voorheen, maar dan onmiddellijk daarna - je zou het volgende berichtvenster krijgen!

De IIF-functie voert zowel de TRUE- als de FALSE-sectie van de coderegel uit - hij verlaat de code niet zodra de voorwaarde als waar is bevonden - hij voert nog steeds de false-sectie uit - en geeft ons dus een valse melding in de tweede berichtenvenster. Als je had gebruiktAls… Dan… Anders… Einde Als - dit zou niet zijn gebeurd - de IF-functie voert alleen de TRUE of de FALSE-sectie van de code uit - afhankelijk van de logica die aan de code wordt doorgegeven.

De code is slecht ontworpen (met opzet!) waarbij de berichtvakken binnen de coderegel worden gehouden waarop de IIF-instructie staat in plaats van achter de code, of in de subroutine. Omdat de IIF-functie zowel de TRUE- als de FALSE-secties van de instructie uitvoert, worden beide berichten geretourneerd.

We kunnen deze fout oplossen door het berichtvenster naar onder de IIF-functieregel te verplaatsen, zoals in de onderstaande code, of door het berichtvenster naar de subprocedure te verplaatsen volgens het eerste voorbeeld in dit artikel.

1234 Functie GetNames(strName As String) As StringGetNames = IIf(strName = "John", "De naam is John", "De naam is niet John")MsgBox (GetNames)Functie beëindigen

Als je voorzichtig bent bij het schrijven van je code, kan de IIF-functie je veel regels code en extra typen besparen!

Geneste IIF's

We kunnen de IIF-functie nesten op dezelfde manier als het nesten van de IF-functie, maar nogmaals, alles gebeurt in één regel.

123 Functie GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf(dblPrijs >= 500, 10, IIf(dblPrijs >= 250, 5, IIf(dblPrijs >= 100, 2.5, 0)))Functie beëindigen

We zouden deze functie dan kunnen aanroepen vanuit een subprocedure

12345 Sub ZoekKorting()Dim dblP als dubbeldblP = 899MsgBox ("De korting die u kunt verkrijgen is " & GetDiscount(dblP) & "%")Einde sub

of je zou het vanuit Excel kunnen aanroepen en het gebruiken als een UDF (User Defined Function)

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave