VBA IIF -funktion

Denne vejledning forklarer, hvordan du bruger IIF i VBA

VBA IIF -funktionen ligner at bruge IF -funktionen i Excel. Den tester, om en betingelse er opfyldt, og returnerer en værdi (eller beregning) hvis SAND, en anden værdi (eller beregning) hvis FALSK.

Det ligner VBA If -erklæringen, mange betragter det som en genvej til at bruge denne metode, da du kun behøver at skrive en kodelinje for at få det ønskede resultat frem for at bruge en Hvis … Så … Ellers … Afslut hvis rutine. Det skal dog bruges korrekt, da det kan føre til problemer i din kode.

IIF -syntaks

IFF -funktionen består af 3 dele - den logiske test, den sande del og den falske del.

  • Udtryk:Den logiske test, der skal finde sted.
  • Sand del: Det resultat, der returneres, hvis den logiske test er SAND.
  • Falsk del: Det resultat, der returneres, hvis den logiske test er FALSK.

Skrivning af en IIF -funktionsprocedure

123 Funktion GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Navnet er John", "Navnet er ikke John")Afslut funktion

I funktionen ovenfor kan vi bruge en underprocedure til at teste, om variablen, vi sender til funktionen, er strengen "John"

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

Hvis vi skulle køre delproceduren TestGetNames, ville den kalde GetNames-funktionen og returnere en meddelelsesboks.

Hvis vi havde brugt If -metoden i stedet, ville koden have set sådan ud:

1234567 Funktion GetNames (strName As String) As StringHvis (strName = "John") SåGetNames = "Navnet er John"AndetGetNames = "Navnet er ikke John"Afslut HvisAfslut funktion

Vi har effektivt skrevet en linje kode i stedet for 5 linjer kode - imponerende!

Hvorfor bruge If i stedet?

Overvej følgende

123 Funktion GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("Navnet er John"), MsgBox ("Navnet er ikke John"))Afslut funktion

Hvis du nu kører følgende delprocedure for at kalde din funktion

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

Du ville få den samme meddelelsesboks som før, men derefter umiddelbart efter det - ville du få den næste beskedboks!

IIF -funktionen udfører både de SANDE og de FALSKE sektioner af kodelinjen - den forlader ikke koden, når den har fundet betingelsen til at være sand - den udfører også også den falske sektion - hvilket giver os en falsk besked i anden meddelelsesboks. Hvis du havde brugtHvis … Så … Ellers … Afslut hvis - dette ville ikke være sket - IF -funktionen udfører kun enten den SANDE eller den FALSKE del af koden - afhængigt af logikken, der sendes til koden.

Koden er dårligt designet (med vilje!) Med meddelelsesbokse indeholdt inden for den kodelinje, som IIF-sætningen er på i stedet for efter koden eller i underrutinen. Da IIF -funktionen kører både SAND og FALSK afsnittene i sætningen, returneres begge meddelelser.

Vi kunne rette denne fejl ved at flytte meddelelsesboksen til under IIF-funktionslinjen, som i koden herunder, eller ved at flytte meddelelsesboksen til delproceduren i henhold til det første eksempel i denne artikel.

1234 Funktion GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Navnet er John", "Navnet er ikke John")MsgBox (GetNames)Afslut funktion

Hvis du er forsigtig, når du skriver din kode, kan IIF -funktionen spare dig for masser af kodelinjer og ekstra indtastning!

Indlejrede IIF’er

Vi kan rede IIF -funktionen på samme måde som at indlejre IF -funktionen, men igen er alt gjort i en linje.

123 Funktion GetDiscount (dblPrice as Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2,5, 0)))Afslut funktion

Vi kunne derefter kalde denne funktion fra en underprocedure

12345 Sub FindDiscount ()Dim dblP som dobbeltdblP = 899MsgBox ("Den rabat du kan opnå er" & GetDiscount (dblP) & "%")Afslut Sub

eller du kan kalde det indefra Excel og bruge det som en UDF (brugerdefineret funktion)

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave