TL;DR —
UCaseundLCasewandeln 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"gleichFalse— normalisieren Sie beide Seiten vor dem Vergleich mitUCase) und Anzeigen. Sie sind verlustbehaftet und unumkehrbar, überschreiben Sie also niemals gespeicherte Daten mit ihnen. Und für Title Case gibt es kein eingebautesPCase— Sie nutzenStrConv(s, vbProperCase), das bei einfachen Namen funktioniert, aberMcDonald,O'BrienundiPhoneverstü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 VBAFalseist — 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 StrConvfü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:
- Beide Seiten mit
UCase/LCase—UCase(a) = UCase(b). Explizit, lokal, für den nächsten Leser offensichtlich. Die beste Standardwahl für einen einmaligen Vergleich. 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.Option Compare Textam Anfang des Moduls — macht jedes=,LikeundInStrin 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
