Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 · zuletzt geprüft am 05.06.2026
Kurz gesagt — Select Case nimmt einen Wert und leitet ihn zu einem Ergebnis. Kopieren und anpassen:
Sub NoteBerechnen()
Dim punkte As Long
punkte = Range("A1").Value
Select Case punkte
Case Is >= 90: Range("B1").Value = "Sehr gut"
Case 75 To 89: Range("B1").Value = "Gut"
Case 60 To 74: Range("B1").Value = "Befriedigend"
Case Else: Range("B1").Value = "Nicht bestanden"
End Select
End Sub
Aber das Snippet ist nicht der Punkt. Die meisten Anleitungen werfen Ihnen zehn Varianten hin und überlassen Ihnen die Frage, wann Select Case die richtige Wahl ist. Hier kommt zuerst das Denkmodell — damit Sie auch Fälle beurteilen können, die niemand gezeigt hat.
Die eine Idee: Select Case ist ein Verteiler, keine Checkliste
If...ElseIf ist eine Checkliste. Sie stellt eine Folge unabhängiger Ja/Nein-Fragen — ist es dies? nein… ist es das? nein… — und jede Frage darf eine andere Variable betreffen.
Select Case ist ein Verteiler. Es nimmt einen Wert, geht die Ausgänge durch und schaltet auf den ersten, der passt. Jeder Case ist ein möglicher Ausgang für denselben Eingang.
Dieser eine Unterschied sagt Ihnen alles:
- Dieselbe Variable, viele Ergebnisse → Verteiler.
Select Case. - Verschiedene Variablen, echte unabhängige Fragen → Checkliste.
If...ElseIf.
Wenn Sie je ElseIf punkte = 1 … ElseIf punkte = 2 … ElseIf punkte = 3 schreiben, haben Sie einen Verteiler aus Checklisten-Teilen gebaut. Das ist das Signal zum Wechsel.
Die Regel, die jeden Select-Case-Fehler erklärt: Der erste Treffer gewinnt
VBA wertet Ihren Wert einmal aus und probiert dann jeden Case von oben nach unten — und stoppt beim ersten Treffer. Verinnerlichen Sie diese Regel, und der Klassiker unter den Fehlern verliert sein Rätsel:
' FEHLER: Nichts unter 100 erreicht je die zweite Zeile
Select Case punkte
Case Is < 100: note = "zu prüfen"
Case Is < 50: note = "kritisch" ' ← toter Code
End Select
Case Is < 100 schluckt bereits alles unter 50, also wird der Ausgang „kritisch" nie erreicht. Die Lösung ist kein neues Schlüsselwort, sondern die Reihenfolge. Den engsten Fall zuerst:
Select Case punkte
Case Is < 50: note = "kritisch"
Case Is < 100: note = "zu prüfen"
End Select
Fast jede Frage „Mein Select Case macht das Falsche" ist genau diese Regel, die zubeißt. Das Konzept ist die Fehlersuche.
Wie der Verteiler schaltet — vier Arten von Ausgang
Die Vergleichsarten lernt man einmal. Jede ist eine andere Form von Ausgang; alle leben im selben Block.
Genaue Werte und Listen — ein Ausgang, mehrere Beschriftungen:
Select Case land
Case "Frankreich", "Deutschland", "Italien": region = "Europa"
Case "Japan", "Korea", "China": region = "Asien"
Case Else: region = "Sonstige"
End Select
Bereiche mit To — das Arbeitspferd für Stufen und Bänder:
Select Case bestellwert
Case 0 To 99.99: rabatt = 0
Case 100 To 499.99: rabatt = 0.05
Case Else: rabatt = 0.1
End Select
Is mit Vergleich — wenn kein Bereich passt (>, <, >=, <=, <>). Is ist Pflicht; ein nacktes Case punkte > 5 kompiliert nicht.
Frei mischen in einem Block — genau diese Flexibilität ist der Grund, warum Select Case dort skaliert, wo ElseIf-Ketten verrotten:
Select Case punkte
Case 0, 1, 2: bewertung = "Schlecht" ' eine Liste
Case 3 To 6: bewertung = "Mittel" ' ein Bereich
Case Is >= 7: bewertung = "Gut" ' ein Vergleich
End Select
Die Notausfahrt: Select Case True
Das ist der Kniff, der die Kenner vom Rest trennt. Wenn Ihre Bedingungen verschiedene Variablen betreffen, würden Sie normalerweise zu verschachtelten If greifen. Tun Sie es nicht. Setzen Sie den Testausdruck auf True, und jeder Case wird zu einem vollständigen booleschen Ausdruck:
Select Case True
Case alter < 18 And hatBegleitung: tarif = "Kind"
Case alter >= 65: tarif = "Senior"
Case istStudent And alter < 26: tarif = "Student"
Case Else: tarif = "Erwachsen"
End Select
Das ist der idiomatische VBA-Weg, Logik über mehrere Variablen flach und lesbar zu halten — die eine Stelle, an der der Verteiler über eine einzelne Variable hinausreicht. Greifen Sie dazu, bevor Sie eine Pyramide aus If bauen.
Wann Sie Select Case NICHT nehmen sollten
Eine ehrliche Einordnung, weil die meisten Anleitungen sie verschweigen:
- Zwei Ergebnisse? Nehmen Sie
If...Else. EinSelect Casemit einemCaseund einemCase Elseist Zeremoniell. - Eine Bedingung pro Zweig, alle über verschiedene Variablen? Das ist eine Checkliste —
If...ElseIfliest sich besser, außer Sie wollen bewusst dasSelect Case True-Layout. - Drei oder mehr Ergebnisse zur selben Variable? Immer
Select Case. Wer hier nochElseIfschreibt, macht der nächsten Person (oft dem eigenen Ich in sechs Monaten) das Leben schwerer als nötig.
Geschwindigkeit ist eine Fußnote — der Testausdruck wird nur einmal ausgewertet — aber wählen Sie Select Case für die Lesbarkeit, nicht für Mikrosekunden.
Häufige Fehler — alles Folgen des Modells
- Falscher Fall greift / toter Zweig. Wieder der erste Treffer. Vom Engsten zum Weitesten ordnen.
Case punkte > 5kompiliert nicht. Ein nackter Vergleich ist unzulässig; schreiben SieCase Is > 5.- Textvergleich scheitert an Groß-/Kleinschreibung.
Select Caseunterscheidet sie standardmäßig. Setzen SieOption Compare Textan den Modulanfang oder normalisieren Sie mitSelect Case LCase(land).
Ab einem gewissen Punkt sollte Verzweigungslogik gar nicht mehr von Hand geschrieben werden
Select Case ist das richtige Werkzeug, um einen Wert zu verteilen — aber sobald sich die Regeln selbst ständig ändern (neue Stufen, neue Bänder, neue Sonderfälle), testen und retesten Sie Code bei jeder Änderung. ExcelMaster Agent lässt Sie die Regel formulieren, statt sie zu programmieren — „staffle Spalte A: unter 100 = kein Rabatt, 100–499 = 5 %, ab 500 = 10 %" — und erzeugt die Logik samt Bereichen und Sonderfällen. Kostenlos testen →
Weitere Anleitungen
- VBA If Then Else — wenn die Checkliste die richtige Form ist
- VBA For-Schleife in Excel — 8 Praxisbeispiele
- VBA While-Schleife — While, Do While & Do Until erklärt
FAQ
Wann sollte ich Select Case statt If verwenden?
Wenn Sie eine Variable zu drei oder mehr Ergebnissen leiten. Bei zwei Ergebnissen oder Bedingungen über verschiedene Variablen liest sich If...ElseIf besser — außer Sie nutzen bewusst das Muster Select Case True.
Kann VBA Select Case einen Wertebereich prüfen?
Ja — Case 1 To 10 trifft jeden Wert von 1 bis 10 einschließlich, und Sie können Bereiche, Listen und Is-Vergleiche im selben Block mischen.
Warum greift mein Select Case den falschen Zweig? Der erste Treffer gewinnt. Ein weiter Fall vor einem engen schluckt den engen — vom Engsten zum Weitesten umsortieren.
Ist Select Case schneller als ElseIf? Geringfügig, weil der Wert nur einmal ausgewertet wird. Der eigentliche Gewinn ist Lesbarkeit, nicht Geschwindigkeit.
