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)