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

VBA UCase & LCase in Excel — Case-insensitive Vergleiche und die StrConv-Title-Case-Falle

|

VBA UCase & LCase in Excel — Case-insensitive Vergleiche und die StrConv-Title-Case-Falle

TL;DRUCase und LCase wandeln Text in Groß- bzw. Kleinbuchstaben um. Der Fehler ist, sie für das Bereinigen von Daten zu halten. Sie sind nur für zwei Aufgaben da: Vergleichen (VBAs = ist case-sensitive, also ist "Yes" = "yes" gleich False — normalisieren Sie beide Seiten vor dem Vergleich mit UCase) und Anzeigen. Sie sind verlustbehaftet und unumkehrbar, überschreiben Sie also niemals gespeicherte Daten mit ihnen. Und für Title Case gibt es kein eingebautes PCase — Sie nutzen StrConv(s, vbProperCase), das bei einfachen Namen funktioniert, aber McDonald, O'Brien und iPhone verstümmelt.

Die Groß-/Kleinschreibung zu ändern fühlt sich wie das Einfachste in VBA an, und UCase/LCase selbst sind auch einfach. Die Fehler entstehen aus dem Warum, aus dem die Leute danach greifen. Als Vergleichswerkzeug eingesetzt, sind sie unverzichtbar. Als Speicherwerkzeug eingesetzt, zerstören sie stillschweigend Informationen.

Was Sie lernen

  • Warum "Yes" = "yes" in VBA False ist — und der richtige Weg, ohne Rücksicht auf die Groß-/Kleinschreibung zu vergleichen
  • Drei Wege für einen case-insensitive Abgleich (und welchen Sie wählen sollten)
  • Warum Sie die UCase-Ausgabe niemals über Ihre Originaldaten speichern sollten
  • StrConv für Title Case — und die Eigennamen-Falle, die damit einhergeht

Das mentale Modell: Groß-/Kleinschreibung ist eine Linse, keine Bearbeitung

Stellen Sie sich UCase/LCase als ein Paar Linsen vor, durch die Sie schauen, nicht als Bearbeitungen, die Sie an der Seite vornehmen. Wenn Sie wissen wollen, ob zwei Strings unabhängig von der Groß-/Kleinschreibung übereinstimmen, betrachten Sie beide durch dieselbe Linse (wenden Sie UCase an) und vergleichen, was Sie sehen — die Seite darunter bleibt unberührt. In dem Moment, in dem Sie die Linse als Bearbeitung behandeln — also UCase(name) zurück über name schreiben —, haben Sie die ursprüngliche Schreibweise für immer weggeworfen.

Sub TheLensIdea()
    Dim stored As String
    stored = "McDonald"               ' die echten Daten — behalten

    ' Durch eine Linse vergleichen, die Daten nicht verändern
    If UCase(stored) = UCase("mcdonald") Then
        Debug.Print "match"           ' das wird ausgegeben
    End If

    Debug.Print stored                ' immer noch "McDonald" — unberührt
End Sub

Die Regel, die den häufigsten Groß-/Kleinschreibungs-Bug abfängt: VBAs = ist case-sensitive

Das ist der Fehlermodus hinter einem großen Anteil der „mein If läuft nie"-Fragen. Standardmäßig vergleicht VBA Strings Byte für Byte, sodass die Groß-/Kleinschreibung zählt:

Sub CaseSensitiveByDefault()
    Dim answer As String
    answer = "YES"                    ' was der Benutzer tatsächlich getippt hat

    If answer = "yes" Then            ' FALSE — "YES" <> "yes"
        Debug.Print "confirmed"       ' läuft nie
    End If

    ' Lösung: beide Seiten durch dieselbe Linse normalisieren
    If UCase(answer) = "YES" Then     ' TRUE
        Debug.Print "confirmed"       ' läuft
    End If
End Sub

Sie haben drei Wege, einen Vergleich case-insensitive zu machen, und die Wahl ist eine echte Abwägung:

  1. Beide Seiten mit UCase/LCaseUCase(a) = UCase(b). Explizit, lokal, für den nächsten Leser offensichtlich. Die beste Standardwahl für einen einmaligen Vergleich.
  2. StrComp(a, b, vbTextCompare) — gibt 0 zurück, wenn die Strings ohne Rücksicht auf die Groß-/Kleinschreibung gleich sind. Am saubersten, wenn Sie gezielt einen Vergleich und nichts anderes wollen.
  3. Option Compare Text am Anfang des Moduls — macht jedes =, Like und InStr in diesem Modul case-insensitive. Mächtig, aber unsichtbar: Wer eine einzelne Zeile liest, kann nicht erkennen, dass sich die Vergleichsregeln geändert haben. Setzen Sie es sparsam ein und nur, wenn das ganze Modul dieses Verhalten will.

Meine Regel: Bevorzugen Sie explizites UCase für einen einzelnen Vergleich; nutzen Sie Option Compare Text nur, wenn ein ganzes Modul wirklich case-insensitive ist, und kommentieren Sie es deutlich.

Dictionary-Keys sind ebenfalls case-sensitive

Dieselbe Falle trifft das Scripting.Dictionary. Standardmäßig sind d("USA") und d("usa") zwei verschiedene Keys — Sie bekommen doppelte Einträge, mit denen Sie nicht gerechnet haben. Setzen Sie entweder direkt nach dem Erstellen d.CompareMode = vbTextCompare, oder wenden Sie UCase auf jeden Key an, bevor Sie ihn speichern oder nachschlagen. Wählen Sie eins und bleiben Sie konsequent.

Title Case: Es gibt kein PCase, also nutzen Sie StrConv

VBA gibt Ihnen UCase und LCase, aber keine eingebaute Funktion für Proper Case. Das Werkzeug ist StrConv mit dem vbProperCase-Flag:

Debug.Print StrConv("john smith", vbProperCase)   ' -> "John Smith"

Das funktioniert wunderbar für gewöhnliche Eingaben in Kleinbuchstaben. Aber StrConv kennt nur eine Regel — den ersten Buchstaben jedes Wortes großschreiben, den Rest klein — und diese Regel ist für viele echte Namen falsch:

Debug.Print StrConv("McDonald", vbProperCase)  ' -> "Mcdonald"   (falsch)
Debug.Print StrConv("O'BRIEN", vbProperCase)   ' -> "O'brien"    (falsch)
Debug.Print StrConv("iPhone", vbProperCase)    ' -> "Iphone"     (falsch)
Debug.Print StrConv("ACME III", vbProperCase)  ' -> "Acme Iii"   (falsch)

Die Abwägung: StrConv(..., vbProperCase) ist ein „gut genug"-Bereiniger für Freitext-Namen und -Adressen, bei denen die Eingabe komplett in Groß- oder Kleinbuchstaben vorliegt. Es ist kein Formatierer für Marken oder Eigennamen. Wenn die Korrektheit für bestimmte Namen zählt, pflegen Sie eine Ausnahmenliste und korrigieren Sie diese nach StrConv, oder verzichten Sie ganz auf die automatische Title-Case-Umwandlung.

StrConv kann weit mehr als nur die Groß-/Kleinschreibung, weshalb es der richtige Ort dafür ist — es konvertiert auch zwischen Halbbreite und Vollbreite (vbWide/vbNarrow) und zwischen Hiragana und Katakana (vbHiragana/vbKatakana) für ostasiatische Texte sowie zwischen Byte- und Unicode-Darstellung. Es lohnt sich zu wissen, dass diese Flag-Liste existiert, wenn Sie auf solche Anforderungen stoßen.

Wie ExcelMaster hilft

Das meiste VBA zur Behandlung der Groß-/Kleinschreibung ist Teil eines Bereinigungsdurchlaufs: eine Spalte vereinheitlichen, damit Abgleiche und Lookups nichts mehr verfehlen. ExcelMaster erledigt das aus einer Beschreibung — „Gleiche diese beiden Kundenlisten ohne Rücksicht auf Groß-/Kleinschreibung und Leerzeichen ab" — und normalisiert für den Vergleich, ohne die Anzeigewerte in Ihrem Blatt zu zerstören. Sie beschreiben die Absicht (case-insensitive Abgleich, Title Case für die Anzeige), und es hält die Originaldaten intakt.

Sie werden weiterhin UCase/LCase direkt in Makros schreiben. Aber für „bereinige und gleiche diese Spalten ab"-Aufgaben schlägt das Formulieren der Regel das händische Normalisieren jedes einzelnen Keys.

Häufig gestellte Fragen

Wie wandle ich Text in VBA in Groß- oder Kleinbuchstaben um?

Nutzen Sie UCase(text) für Großbuchstaben und LCase(text) für Kleinbuchstaben. Sie geben einen neuen String zurück und verändern das Original nicht, weisen Sie das Ergebnis also irgendwohin zu, wenn Sie es behalten wollen.

Wie führe ich in VBA einen case-insensitive Vergleich durch?

Normalisieren Sie beide Seiten mit derselben Funktion — UCase(a) = UCase(b) — oder nutzen Sie StrComp(a, b, vbTextCompare), das 0 zurückgibt, wenn die Strings ohne Rücksicht auf die Groß-/Kleinschreibung gleich sind. Für ein ganzes Modul macht Option Compare Text jeden Vergleich case-insensitive.

Wie schreibe ich in VBA den ersten Buchstaben jedes Wortes groß?

Nutzen Sie StrConv(text, vbProperCase). Beachten Sie, dass es alles Übrige kleinschreibt, sodass es McDonald in Mcdonald und iPhone in Iphone verwandelt. Bei Namen mit internen Großbuchstaben korrigieren Sie diese anschließend mit einer Ausnahmenliste.

Warum verstümmelt StrConv Namen wie McDonald?

vbProperCase folgt einer starren Regel: den ersten Buchstaben jedes Wortes großschreiben, den Rest klein. Es hat keinerlei Wissen über Eigennamen, sodass jeder Name mit einem internen Großbuchstaben (McDonald, MacLeod, iPhone) oder Apostroph (O'Brien) falsch herauskommt. Behandeln Sie es als Best-Effort-Bereiniger, nicht als Autorität für Namen.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 14.06.2026.

Verwandte Anleitungen: VBA Concatenate · VBA Str · VBA Replace · VBA Dictionary · VBA For Loop