VBA If, ElseIf, Else (die ultimative Anleitung für If-Anweisungen)
In this Article
VBA If-Anweisung
If Then
Mit VBA If-Anweisungen können Sie testen, ob Ausdrücke WAHR oder FALSCH sind, und basierend auf den Ergebnissen unterschiedlichen Code ausführen.
Schauen wir uns ein einfaches Beispiel an:
If Range("A2").Value > 0 Then Range("B2").Value = "Positiv"
Dieser Test wertet aus, ob der Wert in Range A2 größer als 0 ist. Wenn dem so ist, wird der Bereich B2 gleich „Positiv“ gesetzt.
Hinweis: Beim Testen von Bedingungen werden wir die Vergleichsoperatoren =, >, <, <>, <=, >= verwenden. Wir werden sie später in diesem Artikel ausführlicher besprechen.
Die Syntax für eine einfache einzeilige If-Anweisung sieht wie folgt aus:
If [Bedingung] then [Ausführung]
Um die Lesbarkeit zu verbessern, kann ein Zeilenfortsetzungszeichen (Unterstrich) verwendet werden, um eine If-Anweisung auf zwei Zeilen zu brechen (wie wir es im obigen Bild bereits getan haben):
If [Bedingung] then _
[Ausführung]
If Range("A2").Value > 0 Then _
Range("B2").Value = "Positiv"
End If
Die obige „einzeilige“ If-Anweisung funktioniert gut, wenn Sie nur eine Bedingung testen. Aber wenn Ihre If-Anweisungen mehr als eine Bedingung enthalten, müssen Sie dies gesamte If-Anweisung mit einem „End If“ abschließen:
If Range("A2").Value > 0 Then
Range("B2").Value = "Positiv"
End If
So lautet die Syntax:
If [Bedingung] then
[Ausführung]
End If
Das End If kennzeichnet das Ende der if-Anweisung.
Fügen wir zusätzlich noch ein ElseIF ein:
ElseIF – Mehrere Bedingungen
Ein ElseIf wird an eine bestehende If-Anweisung angehängt. ElseIf testet, ob eine Bedingung erfüllt ist, NACHDEM alle vorherigen Bedingungen nicht erfüllt wurden.
Im vorherigen Beispiel haben wir getestet, ob ein Zellwert positiv ist. Jetzt werden wir mit einem anschließenden ElseIf auch testen, ob der Zellwert negativ ist:
If Range("A2").Value > 0 Then
Range("B2").Value = "Positiv"
ElseIf Range("A2").Value < 0 Then
Range("B2").Value = "Negativ"
End If
Sie können mehrere ElseIfs verwenden, um mehrere Bedingungen aneinander zu ketten:
Sub Wenn_Mehrere_Bedingungen()
If Range("A2").Value= "Katze" Then
Range("B2").Value = "Miau"
ElseIf Range("A2").Value = "Hund" Then
Range("B2").Value = "Wuff"
ElseIf Range("A2").Value = "Ente" Then
Range("B2").Value = "Quak"
End If
End Sub
Nun fügen wir ein Else hinzu:
Else
Der Else-Block wird ausgeführt, wenn keine der vorherigen Bedingungen erfüllt sind.
Wir beenden unser Beispiel, indem wir ein Else verwenden, um anzugeben, dass der Zellwert, wenn er nicht positiv oder negativ ist, Null sein muss:
Nachdem wir den Wert der Zelle erfolglos auf positive und negative Zahlen getestet haben, beenden wir unser Beispiel mit dem Schluss, dass der Wert Null sein muss.
If Range("A2").Value > 0 Then
Range("B2").Value = "Positiv"
ElseIf Range("A2").Value < 0 Then
Range("B2").Value= "Negativ"
Else
Range("B2").Value = "Null"
End If
If-Else
Die häufigste Art der If-Anweisung ist ein einfaches If-Else:
Sub Wenn_Dann()
If Range("A2").Value > 0 Then
Range("B2").Value = "Positiv"
Else
Range("B2").Value = "Nicht positiv"
End If
End Sub
Verschachtelte IFs
Sie können If-Anweisungen auch ineinander „verschachteln“.
Sub Verschachtelte_Ifs()
If Range("A2").Value > 0 Then
Range("B2").Value = "Positiv"
Else
If Range("A2").Value < 0 Then
Range("B2").Value = "Negativ"
Else
Range("B2").Value= "Null"
End If
End If
End Sub
IF – Oder, Und, Xoder, Nicht
Als nächstes werden wir die logischen Operatoren besprechen: Or, And, Xor, Not.
Wenn Oder
Der Operator Or testet, ob mindestens eine Bedingung erfüllt ist.
Der folgende Code testet, ob der Wert in Bereich A2 kleiner als 5.000 oder größer als 10.000 ist:
If Range("A2").Value < 5000 Or Range("A2").Value > 10000 Then
Range("B2").Value = "Außerhalb des Bereichs"
End If
Sie können mehrere Ors in einer Zeile aufnehmen:
If Range("A2").Value < 5000 Or Range("A2").Value > 10000 Or Range("A2").Value = 9999 Then
Range("B2").Wert = "Außerhalb des Bereichs"
End If
Wenn Sie mehrere Ors verwenden wollen, empfiehlt es sich, ein Zeilenfortsetzungszeichen zu verwenden, um Ihren Code lesbarer zu machen:
If Range("A2").Value < 5000 Or _
Range("A2").Value > 10000 Or_
Range("A2").Value = 9999 Then
Range("B2").Value = "Außerhalb des Bereichs"
End If
Wenn Und
Mit dem And-Operator können Sie testen, ob ausnahmslos ALLE Bedingungen erfüllt sind.
If Range("A2").Value >= 5000 And Range("A2").Value <= 10000 Then
Range("B2").Value = "Innerhalb des Bereich"
End If
If Xor
Mit dem Xor-Operator können Sie testen, ob genau eine Bedingung erfüllt ist (ausschließendes Oder). Wenn null 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 den Xor-Operator selten in der VBA-Programmierung gesehen.
Wenn Nicht
Der Not-Operator wird verwendet, um FALSE nach TRUE oder TRUE nach FALSE zu konvertieren:
Sub Wenn_Nicht()
MsgBox Not (True)
End Sub
Beachten Sie, dass der Not-Operator eine Klammer um den zu negierenden Ausdruck benötigt.
Der Not-Operator kann auch auf If-Anweisungen angewendet werden:
If Not (Range("A2").Value >= 5000 And Range("A2").Value <= 10000) Then
Range("B2").Value = "Außerhalb des Bereichs"
End If
If-Vergleiche
Wenn Sie Vergleiche durchführen, werden Sie in der Regel einen der Vergleichsoperatoren verwenden:
Vergleichsoperator | Erläuterung |
---|---|
= | Gleich |
<> | Ungleich |
> | Größer als |
>= | Größer gleich |
< | Kleiner als |
<= | Kleiner gleich |
Sie können aber auch jeden Ausdruck oder Funktion verwenden, die TRUE oder FALSE ergeben.
If – Boolesche Funktion
Wenn Sie Ausdrücke für If-Anweisungen bilden, können Sie auch jede Funktion verwenden, die TRUE oder False zurückgibt. VBA verfügt über einige dieser Funktionen:
Funktion | Beschreibung |
---|---|
IsDate | Gibt TRUE zurück, wenn der Ausdruck ein gültiges Datum ist |
IsEmpty | Prüft auf leere Zellen oder undefinierte Variablen |
IsError | Prüfung auf Fehlerwerte |
IsNull | Prüfung auf NULL-Wert |
IsNumeric | Prüfung auf numerischen Wert |
Sie können wie folgt aufgerufen werden:
If IsEmpty(Range("A1").Value) Then MsgBox "Zelle leer"
Excel hat noch viele weitere Funktionen, die über WorksheetFunction aufgerufen werden können. Hier ist ein Beispiel für die Excel-Funktion IsText:
If Application.WorksheetFunction.IsText(Range("A2").Value) Then _
MsgBox "Zelle enthält Text"
Sie können auch Ihre eigenen benutzerdefinierten Funktionen erstellen (User Defined Functions UDF). Im Folgenden werden wir eine einfache boolesche Funktion erstellen, die TRUE zurückgibt. Dann werden wir diese Funktion in unserer If-Anweisung aufrufen:
Sub Wenn_Funktion()
If WahrheitsFunktion Then
MsgBox "Wahr"
End If
End Sub
Function WahrheitsFunktion() As Boolean
WahrheitsFunktion = True
End Function
Text vergleichen
Ähnlich wie beim Vergleich von Zahlen können Sie auch Text vergleichen:
Msgbox "a" = "b"
Msgbox "a" = "a"
Wenn Sie Text vergleichen, müssen Sie auf die „Groß- oder Kleinschreibung“ achten. Standardmäßig betrachtet VBA Buchstaben mit unterschiedlicher Groß-/Kleinschreibung als nicht übereinstimmend. Mit anderen Worten: „A“ <> „a“.
Wenn Sie möchten, dass VBA die Groß-/Kleinschreibung ignoriert, müssen Sie die Deklaration „Option Compare Text“ am Anfang Ihres Moduls hinzufügen:
Option Compare Text
Nach dieser Deklaration gilt „A“ = „a“:
Option Compare Text
Sub Wenn_Text()
MsgBox "a" = "A"
End Sub
VBA If Like
Der VBA Like-Operator ermöglicht es Ihnen, ungenaue Vergleiche von Text durchzuführen. Folgen Sie auf dem Link „Like-Operator“, um mehr zu erfahren. Wir zeigen im Folgenden ein einfaches Beispiel:
Dim strName as String
strName = "Hr. Schmitt"
If strName Like "Hr*" Then
MsgBox "Wahr"
Else
MsgBox "Falsch"
End If
Hier verwenden wir einen Stern „*“ als Platzhalter. Der * steht für eine beliebige Anzahl von beliebigen Zeichen. Die obige If-Anweisung wird also TRUE zurückgeben. Der Like-Operator ist ein extrem mächtiges, aber oft zu wenig genutztes Werkzeug für den Umgang mit Text.
If-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 Zellenbereich zu durchlaufen:
Sub Wenn_Schleife()
Dim Cell as Range
For Each Cell In Range("A2:A6")
If Cell.Value > 0 Then
Cell.Offset(0, 1).Value = "Positiv"
ElseIf Cell.Value < 0 Then
Cell.Offset(0, 1).Value = "Negativ"
Else
Cell.Offset(0, 1).Value= "Null"
End If
Next Cell
End Sub
If Else Beispiele
Jetzt werden wir einige spezifischere Beispiele durchgehen.
Prüfen, ob eine Zelle leer ist
Dieser Code prüft, ob eine Zelle leer ist. Wenn sie leer ist, wird die Zelle ignoriert. Wenn sie nicht leer ist, wird der Wert der Zelle gleich dem der Zelle rechts daneben gesetzt:
Sub Wenn_Zelle_Leer()
If Range("A2").Value <> "" Then
Range("B2").Value = Range("A2").Value
End If
End Sub
Prüfen, ob eine Zelle einen bestimmten Text enthält
Die Instr-Funktion prüft, ob eine Textzeichenfolge innerhalb einer anderen Zeichenfolge enthalten ist. Verwenden Sie sie mit einer If-Anweisung, um zu prüfen, ob eine Zelle einen bestimmten Text enthält:
If Instr(Range("A2").value, "text") > 0 Then
Msgbox "Text gefunden"
End If
Prüfen, ob Zelle Text enthält
Dieser Code prüft, ob eine Zelle eine Zeichenkette enthält:
Sub Wenn_Zelle_Ist_Text()
If Application.WorksheetFunction.IsText(Range("A2").Value) Then
MsgBox "Zelle ist Text"
End If
End Sub
If Goto
Sie können das Ergebnis einer If-Anweisung verwenden, um zu einem angegebenen Abschnitt des Codes zu springen.
Sub IfGoTo ()
If IsError(Cell.value) Then
Goto Absprung
End If
'Irgendein Code
Absprung:
End Sub
Zeilen löschen wenn eine Zelle leer ist
Mit Ifs und Schleifen können Sie testen, ob eine Zelle leer ist und in dem Fall die gesamte Zeile löschen.
Sub ZeileLoeschenWennZelleLeer()
Dim Cell As Range
For Each Cell In Range("A2:A10")
If Cell.Value = "" Then Cell.EntireRow.Delete
Next Cell
End Sub
If MessageBox Ja / Nein
Mit VBA MessageBoxen können Sie den Benutzer auffordern, aus mehreren Optionen auszuwählen. Die Ja/Nein Message Box fordert den Benutzer auf, Ja oder Nein zu wählen. Sie können eine Ja/Nein Message Box zu einer Prozedur hinzufügen, um den Benutzer zu fragen, ob er die Prozedur fortsetzen möchte oder nicht. Sie verarbeiten die Eingabe des Benutzers mit einer If-Anweisung.
Hier ist die Ja/Nein-Meldungsbox in der Praxis:
Sub MsgBoxVariable()
Dim antwort As Integer
antwort = MsgBox("Willst Du fortfahren?", vbQuestion + vbYesNo)
If antwort = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
End If
End Sub
VBA If, ElseIf, Else in Access VBA
Die Anweisungen If, ElseIf und Else funktionieren in Access VBA genau so wie in Excel VBA.
Sie können eine If-Anweisung verwenden, um zu prüfen, ob ein Recordset-Objekt befüllt ist.