🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA If Then Else in Excel — 6 Praxisbeispiele (If, ElseIf, verschachtelt)

|

VBA If Then Else in Excel — 6 Praxisbeispiele (If, ElseIf, verschachtelt)

Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 · zuletzt geprüft am 05.06.2026

Kurz gesagt — Die Anweisung If...Then...Else führt je nach Bedingung unterschiedlichen Code aus. Kopieren Sie dieses Grundgerüst und passen Sie es an:

Sub NoteBerechnen()
    Dim punkte As Long
    punkte = Range("A1").Value

    If punkte >= 90 Then
        Range("B1").Value = "Sehr gut"
    ElseIf punkte >= 75 Then
        Range("B1").Value = "Gut"
    ElseIf punkte >= 60 Then
        Range("B1").Value = "Befriedigend"
    Else
        Range("B1").Value = "Nicht bestanden"
    End If
End Sub

Dieser eine Block deckt 90 % aller Bedingungen ab, die Sie je in VBA brauchen. Der Rest dieser Anleitung zeigt die Muster, die Sie vor den typischen Fehlern bewahren.

Warum die If-Anweisung so wichtig ist

Jedes Makro, das eine Entscheidung trifft — überfällige Rechnungen markieren, Zellen über dem Budget einfärben, leere Zeilen überspringen — basiert auf If. Wer die Struktur einmal sauber beherrscht, schreibt nie wieder das verschachtelte Chaos, das VBA so schwer wartbar macht.

Die vier Formen von If

Form Wann verwenden Braucht End If?
Einzeiliges If Eine kurze Aktion, kein Else Nein
Block If...End If Ein Zweig, mehrere Zeilen Ja
If...Else Zwei Ergebnisse Ja
If...ElseIf...Else Drei oder mehr Ergebnisse Ja
' Einzeilig — kein End If, nur eine Anweisung
If zelle.Value = 0 Then zelle.Value = "k. A."

' Block — mehrere Zeilen brauchen End If
If zelle.Value = 0 Then
    zelle.Value = "k. A."
    zelle.Interior.Color = vbYellow
End If

Faustregel: Sobald Sie zwei Aktionen oder ein Else brauchen, wechseln Sie zur Block-Form mit End If. Das Vermischen von einzeiliger und Block-Syntax ist die häufigste Ursache für den Compilerfehler „Block If ohne End If".

Beispiel 1 — Überfällige Rechnungen markieren

Sub UeberfaelligMarkieren()
    Dim r As Range
    For Each r In Range("D2:D200")          ' D = Fälligkeitsdatum
        If r.Value < Date And r.Offset(0, 1).Value <> "Bezahlt" Then
            r.Offset(0, 2).Value = "ÜBERFÄLLIG"
            r.Offset(0, 2).Interior.Color = RGB(255, 199, 206)
        End If
    Next r
End Sub

Zwei Bedingungen mit And verknüpft — beide müssen wahr sein. Die Rechnung ist überfällig und noch nicht bezahlt.

Beispiel 2 — And gegen Or, endlich klar

And verlangt, dass jede Bedingung wahr ist. Or reicht eine einzige. Genau hier stolpern Einsteiger ständig:

' Nur freigeben, wenn Betrag klein UND Antragsteller Manager ist
If betrag <= 5000 And rolle = "Manager" Then status = "Automatisch freigegeben"

' Eskalieren, wenn Betrag groß ODER Konto markiert ist
If betrag > 50000 Or istMarkiert = True Then status = "Prüfung nötig"

VBA wertet standardmäßig nicht verkürzt aus (kein Short-Circuit). Rufen Sie also keine Funktion in der zweiten Bedingung auf, die fehlschlägt, wenn die erste falsch ist — teilen Sie das lieber in verschachtelte If auf.

Beispiel 3 — Verschachteltes If für einen echten Entscheidungsbaum

Sub Versandstufe()
    Dim gewicht As Double, land As String
    gewicht = Range("A2").Value
    land = Range("B2").Value

    If land = "DE" Then
        If gewicht <= 1 Then
            Range("C2").Value = "Standard 4,99 EUR"
        Else
            Range("C2").Value = "Schwer 9,99 EUR"
        End If
    Else
        Range("C2").Value = "International 24,99 EUR"
    End If
End Sub

Zwei Ebenen Verschachtelung sind in Ordnung. Darüber hinaus leidet die Lesbarkeit — das ist Ihr Signal, auf Select Case umzusteigen (siehe unten).

Beispiel 4 — IIf für schnelle Zuweisungen in einer Zeile

Für eine einfache Zwei-Wege-Entscheidung passt die Funktion IIf in eine Zeile:

Range("C2").Value = IIf(Range("A2").Value > 0, "Gewinn", "Verlust")

Achtung: IIf wertet beide Argumente aus, auch das verworfene. Setzen Sie also niemals eine Division durch null oder einen riskanten Funktionsaufruf hinein.

Beispiel 5 — Eine Zelle prüfen, nicht nur eine Variable

Sub LeereHervorheben()
    Dim r As Range
    For Each r In Range("A2:A500")
        If IsEmpty(r) Then
            r.Interior.Color = vbRed
        ElseIf Not IsNumeric(r.Value) Then
            r.Interior.Color = vbYellow
        End If
    Next r
End Sub

IsEmpty, IsNumeric und IsError sind die Wächter, die Ihr If vor dem Absturz bei unsauberen Daten bewahren.

Beispiel 6 — Früh aussteigen statt tief verschachteln

Sub ZeileVerarbeiten(r As Range)
    If r.Value = "" Then Exit Sub          ' Schutzklausel — sofort raus
    If Not IsNumeric(r.Value) Then Exit Sub

    r.Offset(0, 1).Value = r.Value * 1.2
End Sub

Schutzklauseln (guard clauses) machen den Code flach. Statt alles in If gültig Then ... End If zu packen, weisen Sie die Fehlerfälle früh ab und lassen die eigentliche Logik ohne Einrückung laufen.

Wann If und wann Select Case

Situation Verwenden
1–2 Ergebnisse oder Bedingungen über verschiedene Variablen If...Else
3+ Ergebnisse zur selben Variable Select Case
Wertebereiche (1–10, 11–20 …) Select Case ... To
And/Or über mehrere Variablen If...ElseIf

Wenn Sie ElseIf x = 1 ... ElseIf x = 2 ... ElseIf x = 3 zur selben Variable schreiben, ist Select Case sauberer und schneller zu lesen.

Häufige Fehler (und die Lösung)

„Block If ohne End If" — Sie haben ein mehrzeiliges If geöffnet, aber nie geschlossen. Jedes Block-If braucht genau ein End If.

„Else ohne If" — Meist ein verirrtes End If über dem Else oder ein einzeiliges If mit verwaistem Else. Block neu einrücken — der Fehler wird sofort sichtbar.

Die Bedingung ist immer wahr/falsch — Sie haben Text mit einer Zahl verglichen oder einen Tippfehler im Operator. Prüfen Sie die Bedingung mit Debug.Print, um zu sehen, was VBA tatsächlich auswertet.

Textvergleich schlägt unerwartet fehl"bezahlt" = "Bezahlt" ist False. Schließen Sie beide Seiten in LCase() ein oder setzen Sie Option Compare Text an den Modulanfang.

Schluss mit handgeschriebenen Bedingungen — beschreiben Sie die Regel

Bedingungslogik ist genau die Stelle, an der VBA spröde wird: ein verschachteltes If zu viel und niemand traut sich ein halbes Jahr später noch an den Code. ExcelMaster Agent lässt Sie die Regel in klarem Deutsch formulieren — „markiere Zeilen in Spalte D rot, wenn das Fälligkeitsdatum überschritten und der Status nicht ‚Bezahlt' ist" — und erzeugt die passende Logik, ohne ein vergessenes End If. Kostenlos testen →

Weitere Anleitungen

FAQ

Kann ich If Then Else in eine Zeile schreiben? Ja, aber nur für eine einzelne Aktion ohne mehrzeiliges Else: If x > 0 Then y = 1. Sobald ein Else oder eine zweite Anweisung dazukommt, brauchen Sie die Block-Form mit End If.

Wie viele ElseIf-Zweige sind möglich? So viele Sie brauchen — testen aber alle Zweige dieselbe Variable, ist Select Case ab drei Zweigen die lesbarere Wahl.

Warum wird meine If-Bedingung immer ausgeführt? Meist ein Typkonflikt (Text mit Zahl verglichen) oder Groß-/Kleinschreibung ("Ja" <> "ja"). Prüfen Sie die Bedingung mit Debug.Print.

Was ist der Unterschied zwischen If und IIf? If ist eine Anweisung, die steuert, welche Zeilen laufen. IIf() ist eine Funktion, die einen von zwei Werten zurückgibt — und sie wertet beide aus, also halten Sie riskante Ausdrücke heraus.