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

VBA Like-Operator in Excel — Platzhalter-Abgleich und die Falle mit der ganzen Zeichenkette

|

VBA Like-Operator in Excel — Platzhalter-Abgleich und die Falle mit der ganzen Zeichenkette

TL;DRtext Like pattern liefert 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: Like trifft die ganze Zeichenkette, ein Test auf einen Teilstring braucht also "*abc*", nicht "abc"; und seine Groß-/Kleinschreibung wird modulweit durch Option Compare gesetzt, 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 InStr vs 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, als Like ausdrü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