VBA If-Anweisung

Wenn, dann
Mit VBA If-Anweisungen können Sie testen, ob Ausdrücke WAHR oder FALSCH sind, indem Sie basierend auf den Ergebnissen unterschiedlichen Code ausführen.Schauen wir uns ein einfaches Beispiel an:
1 | If Range("a2").Value > 0 Then Range("b2").Value = "Positive" |
Dies testet, ob der Wert in Bereich A2 größer als 0 ist. Wenn ja, setzen Sie Bereich B2 auf „Positiv“

Hinweis: Beim Testen von Bedingungen verwenden wir die Vergleichsoperatoren =, >, <, , =. Wir werden sie später im Artikel genauer besprechen.Hier ist die Syntax für eine einfache einzeilige If-Anweisung:
1 | Wenn [test_expression] dann [Aktion] |
Zur besseren Lesbarkeit können Sie die If-Anweisungen mit einem Zeilenfortsetzungszeichen (Unterstrich) auf zwei Zeilen erweitern (wie im obigen Bild):
12 | Wenn [test_ausdruck] dann _[Handlung] |
12 | If Range("a2").Value > 0 Then _Range("b2").Value = "Positiv" |
Ende Wenn
Die obige „einzeilige“ if-Anweisung funktioniert gut, wenn Sie eine Bedingung testen. Da Ihre IF-Anweisungen jedoch mit mehreren Bedingungen komplizierter werden, müssen Sie am Ende der if-Anweisung ein "End If" hinzufügen:
123 | If Range("a2").Value > 0 ThenRange("b2").Value = "Positiv"Ende Wenn |
Hier ist die Syntax:
123 | Wenn [test_expression] dann[Handlung]Ende Wenn |
Das Ende If bezeichnet das Ende der if-Anweisung.
Jetzt fügen wir ein ElseIF hinzu:
ElseIF - Mehrere Bedingungen
Das ElseIf wird einer vorhandenen If-Anweisung hinzugefügt. ElseIf testet, ob eine Bedingung erfüllt ist
NUR wenn die vorherigen Bedingungen nicht erfüllt sind.Im vorherigen Beispiel haben wir getestet, ob ein Zellenwert positiv ist. Jetzt testen wir auch mit ElseIf, ob der Zellenwert negativ ist:
12345 | If Range("a2").Value > 0 ThenRange("b2").Value = "Positiv"ElseIf Range("a2").Value < 0 ThenRange("b2").Value = "Negativ"Ende Wenn |

Sie können mehrere ElseIfs verwenden, um auf mehrere Bedingungen zu testen:
1234567891011 | Unter If_Multiple_Conditions()If Range("a2").Value = "Cat" ThenRange("b2").Value = "Miau"ElseIf Range("a2").Value = "Hund" ThenRange("b2").Value = "Woof"ElseIf Range("a2").Value = "Duck" ThenRange("b2").Value = "Quack"Ende WennEnd Sub |

Jetzt fügen wir ein . hinzu Anders:
Anders
Die Anders wird laufen, wenn keine anderen vorherigen Bedingungen wurden erfüllt.
Wir beenden unser Beispiel mit einem Else, um anzugeben, dass der Zellenwert null sein muss, wenn er nicht positiv oder negativ ist:
1234567 | If Range("a2").Value > 0 ThenRange("b2").Value = "Positiv"ElseIf Range("a2").Value < 0 ThenRange("b2").Value = "Negativ"AndersRange("b2").Value = "Null"Ende Wenn |
Ansonsten
Die häufigste Art von If-Anweisung ist eine einfache If-Else:
1234567 | Unter If_Else()If Range("a2").Value > 0 ThenRange("b2").Value = "Positiv"AndersRange("b2").Value = "Nicht positiv"Ende WennEnd Sub |

Verschachtelte IFs
Sie können if-Anweisungen auch ineinander „verschachteln“.
1234567891011 | Unter Nested_Ifs()If Range("a2").Value > 0 ThenRange("b2").Value = "Positiv"AndersWenn Range("a2").Value < 0 ThenRange("b2").Value = "Negativ"AndersRange("b2").Value = "Null"Ende WennEnde WennEnd Sub |

WENN - Oder, Und, Xor, Nicht
Als nächstes besprechen wir die logischen Operatoren: Or, And, Xor, Not.
Ich für
Die Oder Operatortests, wenn mindestens eine Bedingung ist erfüllt.
Der folgende Code testet, ob der Wert im Bereich A2 kleiner als 5.000 oder größer als 10.000 ist:
123 | If Range("a2").Value 10000 ThenRange("b2").Value = "Außerhalb des Bereichs"Ende Wenn |

Sie können mehrere Ors in eine Zeile einfügen:
123 | If Range("a2").Value 10000 or Range("a2").Value = 9999 ThenRange("b2").Value = "Außerhalb des Bereichs"Ende Wenn |
Wenn Sie mehrere Ors verwenden, wird empfohlen, ein Zeilenfortsetzungszeichen zu verwenden, um den Code leichter lesbar zu machen:
123456 | Wenn Range("a2").Value < 5000 oder _Range("a2").Value > 10000 Oder _Range("a2").Value = 9999 DannRange("b2").Value = "Außerhalb des Bereichs"Ende Wenn |

Wenn und
Mit dem Und-Operator können Sie testen, ob ALLE Bedingungen sind erfüllt.
123 | Wenn Range("a2").Value >= 5000 And Range("a2").Value <= 10000 ThenRange("b2").Value = "Im Bereich"Ende Wenn |

Wenn Xor
Mit dem Xor-Operator können Sie testen, ob genau eine Bedingung ist erfüllt. Wenn keine Bedingungen erfüllt sind, gibt Xor FALSE zurück. Wenn zwei oder mehr Bedingungen erfüllt sind, gibt Xor ebenfalls false zurück.
Ich habe Xor selten in der VBA-Programmierung gesehen.
Wenn nicht
Der Not-Operator wird verwendet, um FALSE in TRUE oder TRUE in FALSE zu konvertieren:
123 | Unter IF_Not()MsgBox nicht (wahr)End Sub |
Beachten Sie, dass der Not-Operator eine Klammer um den Ausdruck erfordert, um zu wechseln.
Der Not-Operator kann auch auf If-Anweisungen angewendet werden:
123 | Wenn nicht (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) ThenRange("b2").Value = "Außerhalb des Bereichs"Ende Wenn |

Wenn Vergleiche
Bei Vergleichen verwenden Sie normalerweise einen der Vergleichsoperatoren:
Vergleichsoperator | Erläuterung |
= | Gleicht |
| Nicht gleichzusetzen mit |
> | Größer als |
>= | Größer als oder gleich wie |
< | Weniger als |
<= | Weniger als oder gleich |
Sie können jedoch auch einen beliebigen Ausdruck verwenden oder Funktion das ergibt WAHR oder FALSCH
If - Boolesche Funktion
Beim Erstellen von Ausdrücken für If-Anweisungen können Sie auch jede Funktion verwenden, die TRUE oder False generiert. VBA hat einige dieser Funktionen:
Funktion | Beschreibung |
IsDate | Gibt TRUE zurück, wenn Ausdruck ein gültiges Datum ist |
Ist leer | Auf leere Zellen oder undefinierte Variablen prüfen |
IstFehler | Auf Fehlerwerte prüfen |
Ist Null | Auf NULL-Wert prüfen |
IstNumerisch | Auf numerischen Wert prüfen |
Sie können wie folgt aufgerufen werden:
1 | If IsEmpty(Range("A1").Value) Then MsgBox "Zelle leer" |
Excel verfügt auch über viele zusätzliche Funktionen, die mit WorksheetFunction aufgerufen werden können. Hier ist ein Beispiel für die Excel IsText-Funktion:
12 | If Application.WorksheetFunction.IsText(Range("a2").Value) Then _MsgBox "Zelle ist Text" |
Sie können auch Ihre eigenen benutzerdefinierten Funktionen (UDFs) erstellen. Im Folgenden erstellen wir eine einfache boolesche Funktion, die TRUE zurückgibt. Dann rufen wir diese Funktion in unserer If-Anweisung auf:
1234567891011 | Unter If_Function()Wenn TrueFunction, dannMsgBox "Wahr"Ende WennEnd SubFunktion TrueFunction() As BooleanTrueFunction = TrueEndfunktion |

Textvergleich
Sie können auch Text vergleichen, ähnlich wie beim Vergleichen von Zahlen:
1 | Nachrichtenbox "a" = "b" |
Beim Vergleichen von Text müssen Sie auf die „Groß-/Kleinschreibung“ (Groß- oder Kleinschreibung) achten. Standardmäßig betrachtet VBA Buchstaben mit unterschiedlichen Groß-/Kleinschreibungen als nicht übereinstimmend. Mit anderen Worten: „A“ „A“.Wenn Sie möchten, dass VBA Groß-/Kleinschreibung ignoriert, müssen Sie die Deklaration Option Compare Text oben in Ihrem Modul hinzufügen:
1 | Option Text vergleichen |
Nachdem Sie diese Erklärung „A“ = „a“ abgegeben haben:
12345 | Option Text vergleichenUnter If_Text()MsgBox "a" = "A"End Sub |
VBA wenn mag
Der VBA-ähnliche Operator ermöglicht Ihnen ungenaue Vergleiche von Text. Klicken Sie auf den Link „Operator mögen“, um mehr zu erfahren, aber wir zeigen unten ein grundlegendes Beispiel:
12345678 | Dim strName als StringstrName = "Herr Charles"Wenn strName wie "Mr*" ThenMsgBox "Wahr"AndersMsgBox "Falsch"Ende Wenn |
Hier verwenden wir ein Sternchen „*“ als Platzhalter. Das * steht für eine beliebige Anzahl beliebiger Zeichen. Die obige If-Anweisung gibt also TRUE zurück. Der Like-Operator ist ein äußerst mächtiges, aber oft zu wenig genutztes Werkzeug für den Umgang mit Text.
Wenn Schleifen
Mit VBA-Schleifen können Sie Aktionen wiederholen. Die Kombination von IF-ELSEs mit Schleifen ist eine großartige Möglichkeit, viele Berechnungen schnell zu verarbeiten.
In Fortsetzung unseres Positiv/Negativ-Beispiels fügen wir eine For Each-Schleife hinzu, um einen Bereich von Zellen zu durchlaufen:
1234567891011121314 | Unter If_Loop()Zelle als Bereich dimmenFür jede Zelle im Bereich ("A2: A6")Wenn Cell.Value > 0 ThenCell.Offset(0, 1).Value = "Positive"ElseIf Cell.Value < 0 ThenCell.Offset(0, 1).Value = "Negativ"AndersCell.Offset(0, 1).Value = "Null"Ende WennNächste ZelleEnd Sub |
Wenn sonst Beispiele
Jetzt gehen wir auf einige spezifischere Beispiele ein.
Überprüfen Sie, ob die Zelle leer ist
Dieser Code prüft, ob eine Zelle leer ist. Wenn es leer ist, wird die Zelle ignoriert. Wenn es nicht leer ist, wird der Zellenwert in die Zelle rechts ausgegeben:
1234567 | Unter If_Cell_Empty()If Range("a2").Value "" ThenRange("b2").Value = Range("a2").ValueEnde WennEnd Sub |
Überprüfen Sie, ob die Zelle einen bestimmten Text enthält
Die Instr-Funktion testet, ob eine Textzeichenfolge in einer anderen Zeichenfolge gefunden wird. Verwenden Sie es mit einer If-Anweisung, um zu überprüfen, ob eine Zelle bestimmten Text enthält:
123 | If Instr(Range("A2").value,"text") > 0 ThenMsgbox "Text gefunden"Ende Wenn |
Überprüfen Sie, ob die Zelle Text enthält
Dieser Code testet, ob eine Zelle Text ist:
1234567 | Unter If_Cell_Is_Text()Wenn Application.WorksheetFunction.IsText(Range("a2").Value) ThenMsgBox "Zelle ist Text"Ende WennEnd Sub |
Wenn Goto
Sie können das Ergebnis einer If-Anweisung verwenden, um zu einem anderen Codeabschnitt zu wechseln.
12345678910 | Unter IfGoTo ()If IsError(Cell.value) ThenZum ÜberspringenEnde Wenn'Irgendein CodeÜberspringen:End Sub |
Zeile löschen, wenn Zelle leer ist
Mit Ifs und Schleifen können Sie testen, ob eine Zelle leer ist und wenn ja, die gesamte Zeile löschen.
123456789 | Unter DeleteRowIfCellBlank()Zelle als Bereich dimmenFür jede Zelle im Bereich ("A2: A10")Wenn Cell.Value = "" Then Cell.EntireRow.DeleteNächste ZelleEnd Sub |
Wenn MessageBox Ja / Nein
Mit VBA Message Boxes können Sie den Benutzer bitten, aus mehreren Optionen auszuwählen. Das Ja/Nein-Meldungsfeld fordert den Benutzer auf, Ja oder Nein auszuwählen. Sie können einem Verfahren ein Ja/Nein-Meldungsfeld hinzufügen, um den Benutzer zu fragen, ob er das Verfahren fortsetzen möchte oder nicht. Sie verarbeiten die Eingabe des Benutzers mit einer If-Anweisung.Hier ist die Ja/Nein-Meldungsbox in der Praxis:
123456789101112 | Sub MsgBoxVariable()Dim answer As Integeranswer = MsgBox("Möchten Sie fortfahren?", vbQuestion + vbYesNo)Wenn Antwort = vbJa DannMsgBox "Ja"AndersMsgBox "Nein"Ende WennEnd Sub |
VBA If, ElseIf, Else in Access VBA
Die Funktionen If, ElseIf und Else funktionieren in Access VBA genauso wie in Excel VBA.
Sie können eine If-Anweisung verwenden, um zu überprüfen, ob Datensätze in einem Recordset vorhanden sind.
