VBA IIF -funksjon

Denne opplæringen vil forklare hvordan du bruker IIF i VBA

VBA IIF -funksjonen ligner på bruk av IF -funksjonen i Excel. Den tester om en betingelse er oppfylt, og returnerer én verdi (eller beregning) hvis SANN, en annen verdi (eller beregning) hvis FALSK.

Det ligner på VBA If Statement, mange anser det som en snarvei til å bruke denne metoden, ettersom du bare trenger å skrive en linje med kode for å få ønsket resultat i stedet for å bruke en Hvis … Så … Ellers … Slutt hvis rutine. Den må imidlertid brukes riktig, da det kan føre til problemer i koden din.

IIF -syntaks

IFF -funksjonen består av 3 deler - den logiske testen, den sanne delen og den falske delen.

  • Uttrykk:Den logiske testen som skal finne sted.
  • Ekte del: Resultatet som blir returnert hvis den logiske testen er SANN.
  • Falsk del: Resultatet som blir returnert hvis den logiske testen er FALSK.

Skriver en IIF -funksjonsprosedyre

123 Funksjon GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Navnet er John", "Navnet er ikke John")Sluttfunksjon

I funksjonen ovenfor kan vi bruke en delprosedyre for å teste om variabelen vi sender til funksjonen er strengen "John"

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

Hvis vi skulle kjøre delprosedyren TestGetNames, ville den ringe GetNames-funksjonen og returnere en meldingsboks.

Hvis vi hadde brukt If -metoden i stedet, hadde koden sett slik ut:

1234567 Funksjon GetNames (strName As String) As StringIf (strName = "John") DaGetNames = "Navnet er John"EllersGetNames = "Navnet er ikke John"Slutt omSluttfunksjon

Vi har effektivt skrevet en kodelinje i stedet for 5 kodelinjer - imponerende!

Hvorfor bruke If i stedet?

Vurder følgende

123 Funksjon GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("Navnet er John"), MsgBox ("Navnet er ikke John"))Sluttfunksjon

Hvis du kjører følgende delprosedyre for å kalle funksjonen din

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

Du vil få den samme meldingsboksen som før, men så umiddelbart etter det - vil du få den neste meldingsboksen!

IIF -funksjonen utfører både SANN og FALSK delene av kodelinjen - den går ikke ut av koden når den har funnet at tilstanden er sann - den utfører fortsatt også den falske delen - og gir oss dermed en falsk melding i andre meldingsboks. Hvis du hadde bruktHvis … Så … Ellers … Slutt hvis - dette ville ikke ha skjedd - IF -funksjonen utfører bare enten SANN eller FALSK delen av koden - avhengig av logikken som sendes til koden.

Koden er dårlig designet (med vilje!) Med meldingsboksene som er innenfor kodelinjen som IIF-setningen er på i stedet for etter koden, eller i underrutinen. Siden IIF -funksjonen kjører både TRUE og FALSE -seksjonene i setningen, returneres begge meldingene.

Vi kan fikse denne feilen ved å flytte meldingsboksen til under IIF-funksjonslinjen, som i koden nedenfor, eller ved å flytte meldingsboksen til delprosedyren i henhold til det første eksemplet i denne artikkelen.

1234 Funksjon GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Navnet er John", "Navnet er ikke John")MsgBox (GetNames)Sluttfunksjon

Hvis du er forsiktig når du skriver koden, kan IIF -funksjonen spare deg for mange kodelinjer og ekstra skriving!

Nestede IIF -er

Vi kan hekke IIF -funksjonen på lignende måte som å hekke IF -funksjonen, men igjen er alt gjort på en linje.

123 Funksjon GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Sluttfunksjon

Vi kan deretter kalle denne funksjonen fra en delprosedyre

12345 Sub FindDiscount ()Dim dblP som dobbeltdblP = 899MsgBox ("Rabatten du kan få er" & GetDiscount (dblP) & "%")Slutt Sub

eller du kan kalle det fra Excel, ved å bruke det som en UDF (brukerdefinert funksjon)

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave