Dieses Tutorial erklärt die Verwendung von IIF in VBA
Die VBA IIF-Funktion ähnelt der Verwendung der IF-Funktion in Excel. Es testet, ob eine Bedingung erfüllt ist, und gibt einen Wert (oder eine Berechnung) zurück, wenn WAHR, ein anderer Wert (oder eine Berechnung) wenn FALSCH.
Es ähnelt der VBA-If-Anweisung, viele halten es für eine Abkürzung für die Verwendung dieser Methode, da Sie nur eine Codezeile schreiben müssen, um das gewünschte Ergebnis zu erhalten, anstatt eine zu verwenden Wenn… Dann… Sonst… Ende Wenn Routine. Sie muss jedoch korrekt verwendet werden, da dies zu Problemen in Ihrem Code führen kann.
IIF-Syntax
Die IFF-Funktion besteht aus 3 Teilen - dem logischen Test, dem wahren Teil und dem falschen Teil.
- Ausdruck:Der logische Test, der stattfinden soll.
- Wahrer Teil: Das Ergebnis, das zurückgegeben wird, wenn der logische Test WAHR ist.
- Falscher Teil: Das Ergebnis, das zurückgegeben wird, wenn der logische Test FALSE ist.
Schreiben einer IIF-Funktionsprozedur
123 | Funktion GetNames(strName As String) As StringGetNames = IIf(strName = "John", "Der Name ist John", "Der Name ist nicht John")Endfunktion |
In der obigen Funktion können wir eine Unterprozedur verwenden, um zu testen, ob die Variable, die wir an die Funktion übergeben, die Zeichenfolge „John“ ist.
123 | UntertestGetNamaes()MsgBox GetNames("John")End Sub |
Wenn wir die Unterprozedur TestGetNames ausführen würden, würde sie die GetNames-Funktion aufrufen und ein Meldungsfeld zurückgeben.
Hätten wir stattdessen die If-Methode verwendet, hätte der Code so ausgesehen:
1234567 | Funktion GetNames(strName As String) As StringIf(strName = "John") ThenGetNames = "Der Name ist John"AndersGetNames = "Der Name ist nicht John"Ende WennEndfunktion |
Wir haben effektiv eine Codezeile anstelle von 5 Codezeilen geschrieben - beeindruckend!
Warum wenn stattdessen verwenden?
Folgendes berücksichtigen
123 | Funktion GetNames(strName As String) As StringGetNames = IIf(strName = "John", MsgBox("Der Name ist John"), MsgBox("Der Name ist nicht John"))Endfunktion |
Wenn Sie nun die folgende Unterprozedur ausführen, um Ihre Funktion aufzurufen
123 | UntertestGetNames()GetNames ("John")End Sub |
Sie würden die gleiche Nachrichtenbox wie zuvor erhalten, aber sofort danach - Sie würden die nächste Nachrichtenbox erhalten!
Die IIF-Funktion führt sowohl den TRUE- als auch den FALSE-Abschnitt der Codezeile aus zweite Nachrichtenbox. Wenn du benutzt hättestWenn… Dann… Sonst… Ende Wenn - dies wäre nicht aufgetreten - die IF-Funktion führt nur entweder den TRUE- oder den FALSE-Abschnitt des Codes aus - je nachdem, welche Logik an den Code übergeben wird.
Der Code ist (absichtlich!) schlecht gestaltet, wobei die Meldungsfelder innerhalb der Codezeile gehalten werden, in der sich die IIF-Anweisung befindet, und nicht nach dem Code oder in der Unterroutine. Da die IIF-Funktion sowohl den TRUE- als auch den FALSE-Abschnitt der Anweisung ausführt, werden beide Nachrichten zurückgegeben.
Wir könnten diesen Fehler beheben, indem wir das Meldungsfeld unter die IIF-Funktionszeile verschieben, wie im folgenden Code, oder indem Sie das Meldungsfeld wie im ersten Beispiel in diesem Artikel in die Unterprozedur verschieben.
1234 | Funktion GetNames(strName As String) As StringGetNames = IIf(strName = "John", "Der Name ist John", "Der Name ist nicht John")MsgBox (GetNames)Endfunktion |
Wenn Sie beim Schreiben Ihres Codes vorsichtig sind, kann Ihnen die IIF-Funktion viele Codezeilen und zusätzliche Eingaben ersparen!
Verschachtelte IIFs
Wir können die IIF-Funktion auf ähnliche Weise verschachteln wie die IF-Funktion, aber auch hier wird alles in einer Zeile erledigt.
123 | Funktion GetDiscount(dblPrice As Double) As DoubleGetDiscount = IIf(dblPrice >= 500, 10, IIf(dblPrice >= 250, 5, IIf(dblPrice >= 100, 2.5, 0)))Endfunktion |
Wir könnten diese Funktion dann aus einer Unterprozedur aufrufen
12345 | Unter FindDiscount()dblP als Double dimmendBlP = 899MsgBox ("Der Rabatt, den Sie erhalten können, ist " & GetDiscount(dblP) & "%")End Sub |
oder Sie können es aus Excel heraus aufrufen und es als UDF (benutzerdefinierte Funktion) verwenden.