🚀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 — so funktioniert es & wann statt Select Case

|

VBA If Then Else in Excel — so funktioniert es & wann statt Select Case

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

Kurz gesagtIf...Then...Else führt je nach Bedingung anderen Code aus. Kopieren und anpassen:

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 Block ist 90 % dessen, was Sie je mit Bedingungen tun. Aber zu wissen, welche Form Sie greifen — und welche eine Falle If lautlos sprengt — zählt mehr als das nächste Snippet.

Die eine Idee: If ist eine Checkliste unabhängiger Fragen

If...ElseIf ist eine Checkliste. VBA liest sie von oben nach unten, stellt eine Ja/Nein-Frage nach der anderen und führt den Block unter der ersten Frage aus, die mit True antwortet — den Rest überspringt es. Das Entscheidende: Jede Frage darf eine andere Variable betreffen.

If stunden > 40 Then                ' Frage zu den Stunden
    lohn = "Überstunden"
ElseIf rolle = "Freiberufler" Then  ' eine andere Frage, zur Rolle
    lohn = "Pauschale"
Else
    lohn = "Standard"
End If

Genau diese Freiheit — jeder Zweig fragt nach etwas anderem — ist der Zweck von If. Und sie zeigt Ihnen, wann Sie es entwachsen sind: sobald jeder Zweig denselben Wert prüft (punkte >= 90, punkte >= 75 …), haben Sie einen Verteiler aus Checklisten-Teilen gebaut. Das ist das Signal, zu Select Case zu wechseln.

Die Falle, die mehr Makros sprengt als jeder Syntaxfehler: VBA wertet nicht verkürzt aus

In den meisten Sprachen hält If a And b bei a an, wenn a falsch ist — b wird nie betrachtet. VBA tut das nicht. Es wertet beide Seiten aus, immer. Das hier sieht sicher aus und ist es nicht:

' ABSTURZ, wenn rng = Nothing — VBA wertet rng.Rows.Count trotzdem aus
If Not rng Is Nothing And rng.Rows.Count > 0 Then ...

Weil VBA rng.Rows.Count selbst dann prüft, wenn rng Is Nothing, bekommen Sie einen Laufzeitfehler auf einer Zeile, die wie ein Schutz aussieht. Die Lösung: Machen Sie die Fragen sequenziell — verschachteln Sie sie, damit die zweite nur läuft, wenn die erste bestanden hat:

If Not rng Is Nothing Then
    If rng.Rows.Count > 0 Then ...
End If

Dieses eine Verhalten erklärt einen riesigen Anteil der „aber meine If-Bedingung ist doch richtig!"-Fehler. Wer weiß, dass VBA immer beide Operanden auswertet, packt keine riskanten Aufrufe mehr in And/Or.

Die andere Regel: Das einzeilige If hat kein End If

Jedes If hat eine von zwei Formen, und sie zu vermischen ist der häufigste Compilerfehler („Block If ohne End If"):

' Einzeilig — genau eine Aktion, KEIN End If
If zelle.Value = 0 Then zelle.Value = "k. A."

' Block — sobald Sie eine zweite Zeile oder ein Else brauchen, brauchen Sie End If
If zelle.Value = 0 Then
    zelle.Value = "k. A."
    zelle.Interior.Color = vbYellow
End If

Die Regel ist simpel: zwei Aktionen oder ein Else? Block-Form, geschlossen mit End If. Etwas dazwischen gibt es nicht.

Die Formen als Beleg — And, Or, Verschachtelung, IIf

Das Modell haben Sie; hier die Konstrukte, die es in die Tat umsetzen.

And verlangt alles wahr; Or reicht eines — der Unterschied, über den Einsteiger stolpern:

If betrag <= 5000 And rolle = "Manager" Then status = "Automatisch freigegeben"
If betrag > 50000 Or istMarkiert Then status = "Prüfung nötig"

Verschachtelung für echt abhängige Fragen — aber zwei Ebenen tief ist die Grenze, bevor die Lesbarkeit kippt (und wieder Ihr Stichwort für Select Case):

If land = "DE" Then
    If gewicht <= 1 Then versand = "Standard" Else versand = "Schwer"
Else
    versand = "International"
End If

IIf ist eine Funktion, keine Anweisung — praktisch für eine einzeilige Zwei-Wege-Wahl, aber sie wertet beide Argumente aus (dieselbe Regel ohne Short-Circuit), also nie eine Division durch null oder einen riskanten Aufruf hinein:

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

Wann If und wann Select Case

Situation Verwenden
Zweige fragen nach verschiedenen Variablen If...ElseIf
1–2 Ergebnisse If...Else
3+ Ergebnisse, alle zum selben Wert Select Case
Wertebereiche eines Werts (1–10, 11–20 …) Select Case ... To

Die ehrliche Regel: verschiedene Fragen → Checkliste (If); ein Wert, viele Antworten → Verteiler (Select Case).

Häufige Fehler — und warum sie passieren

  • „Block If ohne End If" / „Else ohne If". Sie haben einzeilige und Block-Syntax vermischt. Neu einrücken; jedes Block-If braucht genau ein End If.
  • Die Bedingung ist immer wahr/falsch. Meist ein Typkonflikt (Text vs. Zahl) oder Groß-/Kleinschreibung ("Ja" <> "ja"). Prüfen Sie die Bedingung mit Debug.Print.
  • Ein „Schutz" stürzt trotzdem ab. Kein Short-Circuit — teilen Sie das And in verschachtelte If.
  • Textvergleich verfehlt. "bezahlt" <> "Bezahlt". Beide Seiten in LCase(), oder Option Compare Text.

Wenn die Bedingungen den Code überleben

If ist das richtige Werkzeug, um nach verschiedenen Fragen zu verzweigen — aber Geschäftsregeln stehen nicht still. Jede neue Schwelle bedeutet Bearbeiten, erneutes Testen und Hoffen, dass Sie sechs Monate später keinen Zweig zerschossen haben. ExcelMaster Agent lässt Sie die Regel auf Deutsch formulieren — „markiere Zeilen in Spalte D rot, wenn das Fälligkeitsdatum überschritten und der Status nicht ‚Bezahlt' ist" — und erzeugt die Logik, ohne ein vergessenes End If. Kostenlos testen →

Weitere Anleitungen

FAQ

Wann sollte ich If statt Select Case verwenden? Wenn Ihre Zweige nach verschiedenen Variablen fragen oder Sie nur ein bis zwei Ergebnisse haben. Sobald jeder Zweig denselben Wert gegen drei oder mehr Optionen prüft, liest sich Select Case besser.

Wertet VBA And / Or verkürzt aus? Nein. VBA wertet jedes Mal beide Operanden aus. Setzen Sie nie einen Aufruf, der scheitern könnte (auf einem Nothing-Objekt, einem fehlenden Schlüssel), in die zweite Hälfte eines And — verschachteln Sie die Bedingungen.

Kann ich If Then Else in eine Zeile schreiben? Nur für eine einzelne Aktion ohne mehrzeiliges Else: If x > 0 Then y = 1. Mit Else oder zweiter Anweisung brauchen Sie die Block-Form mit End If.

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.