VBA IIF-Funktion

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.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave