VBA IIF -funktion

Denna handledning kommer att förklara hur man använder IIF i VBA

VBA IIF -funktionen liknar att använda IF -funktionen i Excel. Den testar om ett villkor är uppfyllt och returnerar ett värde (eller beräkning) om det är SANT, ett annat värde (eller beräkning) om det är FALSKT.

Det liknar VBA If -uttalandet, många anser att det är en genväg till att använda den här metoden eftersom du bara behöver skriva en kodrad för att få önskat resultat snarare än att använda en Om … Då … Annat … Slut om rutin. Det måste dock användas korrekt eftersom det kan leda till problem i din kod.

IIF -syntax

IFF -funktionen består av tre delar - det logiska testet, den sanna delen och den falska delen.

  • Uttryck:Det logiska testet som ska äga rum.
  • Sann del: Resultatet som returneras om det logiska testet är SANT.
  • Falsk del: Resultatet som returneras om det logiska testet är FALSKT.

Skriva ett IIF -funktionsförfarande

123 Funktion GetNames (strName Som sträng) Som strängGetNames = IIf (strName = "John", "Namnet är John", "Namnet är inte John")Avsluta funktion

I funktionen ovan kan vi använda en delprocedur för att testa om variabeln vi skickar till funktionen är strängen "John"

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

Om vi ​​skulle köra delproceduren TestGetNames, skulle det ringa GetNames-funktionen och returnera en meddelanderuta.

Om vi ​​hade använt If -metoden istället hade koden sett ut så här:

1234567 Funktion GetNames (strName Som sträng) Som strängIf (strName = "John") DåGetNames = "Namnet är John"AnnanGetNames = "Namnet är inte John"Avsluta omAvsluta funktion

Vi har effektivt skrivit en kodrad istället för fem kodrader - imponerande!

Varför använda If istället?

Tänk på följande

123 Funktion GetNames (strName Som sträng) Som strängGetNames = IIf (strName = "John", MsgBox ("Namnet är John"), MsgBox ("Namnet är inte John"))Avsluta funktion

Om du nu kör följande delprocedur för att ringa din funktion

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

Du skulle få samma meddelanderuta som tidigare, men sedan direkt efter det - du skulle få nästa meddelanderuta!

IIF -funktionen exekverar både TRUE och FALSE -sektionerna i kodraden - den lämnar inte koden när den har funnit villkoret vara sann - den kör även fortfarande den falska sektionen - vilket ger oss ett falskt meddelande i andra meddelanderutan. Om du hade använtOm … Då … Annat … Slut om - detta skulle inte ha inträffat - IF -funktionen utför bara antingen SANT eller FALSKT avsnitt i koden - beroende på vilken logik som skickas till koden.

Koden är dåligt utformad (avsiktligt!) Med meddelanderutorna som ligger inom den kodrad som IIF-satsen finns på snarare än efter koden eller i delrutinen. Eftersom IIF -funktionen kör både TRUE och FALSE -sektionerna i satsen returneras båda meddelandena.

Vi kan åtgärda detta fel genom att flytta meddelanderutan till under IIF-funktionsraden, som i koden nedan, eller genom att flytta meddelanderutan till delproceduren enligt det första exemplet i den här artikeln.

1234 Funktion GetNames (strName Som sträng) Som strängGetNames = IIf (strName = "John", "Namnet är John", "Namnet är inte John")MsgBox (GetNames)Avsluta funktion

Om du är försiktig när du skriver din kod kan IIF -funktionen spara dig massor av kodrader och extra skrivning!

Kapslade IIF: er

Vi kan häcka IIF -funktionen på liknande sätt som att häcka IF -funktionen, men än en gång görs allt på en rad.

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

Vi skulle då kunna kalla den här funktionen från ett delprocedur

12345 Sub FindDiscount ()Dim dblP som dubbeldblP = 899MsgBox ("Rabatten du kan få är" & GetDiscount (dblP) & "%")Avsluta Sub

eller så kan du kalla det inifrån Excel och använda det som en UDF (användardefinierad funktion)

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave