TL;DR —
text Like patternliefert einen Boolean: passt die ganze Zeichenkette auf das Platzhalter-Muster? Die Platzhalter sind*(beliebig viele Zeichen),?(genau ein Zeichen),#(genau eine Ziffer),[abc](ein Zeichen aus einer Menge) und[!abc](ein Zeichen nicht in der Menge). Zwei Dinge beißen:Liketrifft die ganze Zeichenkette, ein Test auf einen Teilstring braucht also"*abc*", nicht"abc"; und seine Groß-/Kleinschreibung wird modulweit durchOption Comparegesetzt, ohne Flag pro Aufruf, wie es InStr eines hat.
Sub LikeBasics()
Debug.Print "Excel" Like "Ex*" ' True - beginnt mit "Ex"
Debug.Print "Excel" Like "*x*" ' True - enthaelt ein "x"
Debug.Print "Excel" Like "?????" ' True - genau fuenf Zeichen
Debug.Print "A-1234" Like "[A-Z]-####" ' True - Buchstabe, Bindestrich, vier Ziffern
Debug.Print "cat" Like "[!0-9]*" ' True - beginnt nicht mit einer Ziffer
Debug.Print "Excel" Like "x" ' False - Like trifft die GANZE Zeichenkette
Debug.Print "Excel" Like "excel" ' False - standardmaessig Gross-/Kleinschreibung beachtend
End Sub
Was Sie lernen
- Das mentale Modell — Like ist eine Formprüfung, keine Suche
- Jeden der fünf Platzhalter und was genau er trifft
- Warum Like die ganze Zeichenkette prüft, ein Teilstring-Test also umgebende
*braucht - Warum die Groß-/Kleinschreibung ein modulweiter
Option Compare-Schalter ist, kein Flag pro Aufruf - Wie Sie ein wörtliches
*,?,#oder[mit dem Klammer-Escape treffen - Like vs
InStrvs die Arbeitsblatt-Platzhalter, und wonach Sie greifen sollten
Das mentale Modell: Like ist eine Formprüfung, keine Suche
Like sucht nicht in Ihrer Zeichenkette nach etwas. Es legt das Muster Ende an Ende über die Zeichenkette
und stellt eine einzige Ja/Nein-Frage: hat diese ganze Zeichenkette diese Form? Das ist eine andere
Aufgabe als InStr, das nach einem Teilstring sucht und
meldet, wo er steht, und als ein regulärer Ausdruck, der Stücke finden, zählen und
herausziehen kann. Like liefert nichts als True oder False.
Diese Sichtweise sagt Ihnen, wann es passt: Sie haben eine feste Form und wollen ein Urteil. Ist das
eine gültige SKU ("[A-Z][A-Z]-####")? Endet dieser Dateiname auf .xlsx ("*.xlsx")? Enthält dieser Code
nur Ziffern (Not (s Like "*[!0-9]*"))? Jede davon ist eine Formfrage, und Like beantwortet sie in einer
lesbaren Zeile — kein Objekt zu erzeugen, keine Schleife, keine Positionsrechnerei.
Die Platzhalter, und was jeder trifft
Fünf Sonderzeichen, und alles andere im Muster ist ein Literal, das genau so auftauchen muss:
| Platzhalter | Trifft | Beispiel, das True liefert |
|---|---|---|
* |
null oder mehr beliebige Zeichen | "report_2026.xlsx" Like "*.xlsx" |
? |
genau ein Zeichen | "b1g" Like "b?g" |
# |
genau eine Ziffer (0-9) | "A7" Like "A#" |
[list] |
ein Zeichen aus der Liste oder dem Bereich | "m" Like "[a-m]" |
[!list] |
ein Zeichen nicht in der Liste | "x" Like "[!aeiou]" |
Bereiche in Klammern laufen von niedrig nach hoch ([A-Z], [0-9]), und Sie können Mengen kombinieren
([A-Za-z0-9]). Der Platzhalter # ist eine VBA-Bequemlichkeit ohne Entsprechung bei den
Arbeitsblatt-Platzhaltern, und die Negation [!...] ist das Werkzeug hinter den meisten echten
Validierungen — "*[!0-9]*" bedeutet „enthält irgendwo mindestens ein Nicht-Ziffern-Zeichen", was Sie
negieren, um „nur Ziffern" zu behaupten.
Falle 1: Like prüft die ganze Zeichenkette, keinen Teilstring
Das ist die Nummer-eins-Frage „Like trifft nicht", und sie kommt von der Erwartung eines Suchverhaltens:
Debug.Print "Invoice 2026" Like "2026" ' False - die Zeichenkette ist nicht NUR "2026"
Debug.Print "Invoice 2026" Like "*2026*" ' True - enthaelt "2026" irgendwo
Debug.Print "Invoice 2026" Like "Invoice*" ' True - beginnt mit "Invoice"
Das Muster muss die Zeichenkette vom ersten bis zum letzten Zeichen beschreiben. Geht es Ihnen nur darum,
dass ein Fragment irgendwo auftaucht, hüllen Sie es beidseitig in *. Wollen Sie wirklich nur „enthält
das diesen wörtlichen Text", ist InStr das direktere
Werkzeug — InStr(s, "2026") > 0 — und es ist schneller, weil es kein Muster zu deuten gibt. Greifen Sie zu
Like, wenn die Form zählt (am Anfang verankert, hier eine Ziffer, dort ein Buchstabe), nicht bloß das
Vorhandensein eines Teilstrings.
Falle 2: die Groß-/Kleinschreibung hängt an Option Compare, ohne Override pro Aufruf
Standardmäßig nutzt ein Modul Option Compare Binary, Like ist also Groß-/Kleinschreibung beachtend:
Debug.Print "Excel" Like "excel" ' False unter Option Compare Binary (dem Standard)
Setzen Sie Option Compare Text ganz an den Kopf des Moduls (über jede Prozedur), und jeder
Stringvergleich in diesem Modul — =, Like, InStr ohne ausdrückliches Argument — wird
Groß-/Kleinschreibung ignorierend:
Option Compare Text ' modulweit, am Kopf des Moduls
Sub CaseInsensitive()
Debug.Print "Excel" Like "excel" ' jetzt True
End Sub
Hier der scharfe Unterschied zu seinen Vettern: Like hat kein Fallweise-Flag für die
Groß-/Kleinschreibung. InStr und Filter nehmen beide vbTextCompare als
Argument, Sie können die Schreibung also für einen Aufruf ignorieren und überall sonst beachtend bleiben.
Like kann das nicht — sein Verhalten ist eine Eigenschaft des ganzen Moduls. Brauchen Sie an genau einer
Stelle einen Abgleich ohne Rücksicht auf die Schreibung, ohne das Modul umzustellen, falten Sie die
Schreibung selbst mit UCase: UCase(s) Like "EXCEL". Das hält den Effekt
lokal und offensichtlich, statt ihn in einer Option-Zeile hundert Zeilen weiter weg zu verstecken.
Falle 3: ein wörtliches Sternchen, Fragezeichen oder eine Klammer treffen
Früher oder später müssen Sie ein echtes * oder ? treffen — einen Dateinamen mit einem Platzhalter
darin, ein Suchfeld, das buchstäblich # enthält. Maskieren Sie ein Sonderzeichen, indem Sie es in eckige
Klammern setzen:
Debug.Print "3*4" Like "*[*]*" ' True - enthaelt ein woertliches Sternchen
Debug.Print "OK?" Like "*[?]" ' True - endet mit einem woertlichen Fragezeichen
Debug.Print "C#" Like "*[#]" ' True - woertliche Raute (nicht "eine Ziffer")
Debug.Print "a[1]" Like "*[[]*" ' True - woertliche oeffnende Klammer
Beachten Sie: das ist nicht die Arbeitsblatt-Konvention. Range.Find, Application.Match und COUNTIF
maskieren einen Platzhalter mit vorangestellter Tilde (~*, ~?), und sie verstehen # oder [!list]
überhaupt nicht. Zwei verschiedene Platzhalter-Dialekte leben im selben Produkt, und sie zu verwechseln —
~* in einem Like-Muster oder [*] in einem Find — ist eine subtile, stille Quelle von Treffern, die
nie auslösen.
Like vs InStr vs die Arbeitsblatt-Platzhalter
Die Ein-Zeilen-Entscheidung, damit Sie nicht mehr zum falschen Werkzeug greifen:
- InStr — Sie wollen wissen, ob und wo ein wörtlicher Teilstring auftaucht. Am schnellsten für „enthält genau diesen Text".
Like— Sie wollen ein Ja/Nein zu einer Form: verankert, positionsabhängig, Ziffer-gegen-Buchstabe, eine begrenzte Menge. Ein Boolean, ganze Zeichenkette.- Range.Find / Arbeitsblatt-Platzhalter — Sie gleichen gegen Zellen auf einem
Blatt ab, und der Dialekt ist
*,?und~zum Maskieren. Anderes Werkzeug, andere Platzhalter. - RegExp — die Form hat Wiederholungszahlen, Alternation (
this|that) oder eine Gruppe, die Sie herausziehen müssen. Das ist mehr, alsLikeausdrücken kann.
Wenn das Muster über Like hinauswächst — beschreiben Sie die Aufgabe stattdessen
Like ist eine Freude, genau bis zu dem Punkt, an dem die Form aufhört, fest zu sein. In dem Moment, in dem
die Regel „drei bis fünf Buchstaben, dann ein Bindestrich, dann eine variable Anzahl Ziffern, und zieh die
Ziffern heraus" wird, schreiben Sie Schleifen um Like herum oder schrauben Mid und InStr an, und die
Absicht verschwindet in der Verkabelung. Das ist das Signal, entweder zu einem
echten Muster hinaufzuklettern — oder den Code ganz zu überspringen.
ExcelMaster lässt Sie die Regel in normaler
Sprache formulieren — „behalte die Zeilen, deren Code drei Buchstaben und dann vier Ziffern ist, und setz
die Ziffern in Spalte D" — und erzeugt Python, das den Abgleich anwendet, zuerst Ihre Datei sichert und das
Ergebnis schreibt. Sie beschreiben die Form; es kümmert sich um die Platzhalter, die Schreibung und die
Ränder.
Häufig gestellte Fragen
Was macht der Like-Operator in VBA?
Like vergleicht eine Zeichenkette mit einem Muster und liefert True, wenn die ganze Zeichenkette
passt. Das Muster kann Platzhalter enthalten: * (beliebig viele Zeichen), ? (ein Zeichen), # (eine
Ziffer), [list] (ein Zeichen aus einer Menge) und [!list] (ein Zeichen nicht in der Menge). Es liefert
einen Boolean, wird also in If- und Do While-Bedingungen genutzt.
Warum trifft mein VBA-Like-Vergleich nicht?
Zwei übliche Ursachen. Erstens trifft Like die gesamte Zeichenkette, also ist "Invoice 2026" Like "2026"
False — hüllen Sie das Fragment in Sternchen: "*2026*". Zweitens ist es unter dem Standard
Option Compare Binary Groß-/Kleinschreibung beachtend, also ist "Excel" Like "excel" False, bis Sie
Option Compare Text an den Kopf des Moduls setzen oder die Schreibung mit UCase falten.
Wie mache ich VBA Like unabhängig von der Groß-/Kleinschreibung?
Setzen Sie Option Compare Text an den Kopf des Moduls — es macht jeden Stringvergleich in diesem Modul
unabhängig von der Groß-/Kleinschreibung, Like eingeschlossen. Like hat kein Argument pro Aufruf, wie
InStr und Filter es haben, also vergleichen Sie für einen einmaligen Abgleich ohne Modul-Änderung
gefaltete Zeichenketten: UCase(value) Like "PATTERN".
Wie treffe ich ein wörtliches Sternchen oder Fragezeichen mit Like?
Hüllen Sie das Sonderzeichen in Klammern: [*] trifft ein wörtliches Sternchen, [?] ein wörtliches
Fragezeichen, [#] eine wörtliche Raute und [[] eine wörtliche öffnende Klammer. Zum Beispiel ist
"3*4" Like "*[*]*" True. Dieser Klammer-Escape ist spezifisch für Like; Arbeitsblatt-Werkzeuge wie
Range.Find nutzen stattdessen eine vorangestellte Tilde (~*).
Wann sollte ich in VBA Like statt eines regulären Ausdrucks nutzen?
Nutzen Sie Like, wenn die Form fest ist und Sie nur ein Ja/Nein brauchen: eine Dateiendung, ein Code
fester Länge, eine Nur-Ziffern-Prüfung. Greifen Sie zu einem RegExp, wenn das Muster
variable Wiederholung (\d{2,4}), Alternation (cat|dog) oder eine Fanggruppe hat, die Sie herausziehen
müssen. Like kann Wiederholungen nicht zählen und die getroffenen Stücke nicht zurückgeben; ein regulärer
Ausdruck kann es.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 04.09.2026.
Verwandte Anleitungen: VBA IsNumeric · VBA Regex · VBA InStr · VBA Find · VBA UCase und LCase
