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

VBA IsNumeric in Excel — warum es zu Dingen Ja sagt, die gar keine Zahlen sind

|

VBA IsNumeric in Excel — warum es zu Dingen Ja sagt, die gar keine Zahlen sind

TL;DRIsNumeric(value) liefert True, wenn VBA meint, es könnte den Wert in eine Zahl umwandeln — ein weit größeres Netz als die sauberen Ganzzahlen, die Ihnen vermutlich vorschweben. Es sagt True zu "1E5" (wissenschaftliche Notation), "&HFF" (einem Hex-Literal), "1,000" (einem Tausendertrennzeichen), " 42 " (mit Leerzeichen aufgefüllt) und sogar "12-" (einem nachgestellten Vorzeichen). Es ist außerdem gebietsschema-abhängig, also ist "1,5" auf einem deutschen Rechner eine Zahl und auf einem amerikanischen nicht. Nutzen Sie es als billiges erstes Tor, aber sobald Sie genau eine saubere Ganzzahl oder einen reinen Ziffern-Code brauchen, nageln Sie die Form stattdessen mit dem Like-Operator fest.

Sub IsNumericSurprises()
    Debug.Print IsNumeric("123")      ' True  - wie erwartet
    Debug.Print IsNumeric("1E5")      ' True  - wird als 100000 gelesen (wissenschaftlich)
    Debug.Print IsNumeric("&HFF")     ' True  - wird als 255 gelesen (Hex-Literal)
    Debug.Print IsNumeric("1,000")    ' True  - Tausendertrennzeichen
    Debug.Print IsNumeric("  42  ")   ' True  - fuehrende/nachgestellte Leerzeichen ignoriert
    Debug.Print IsNumeric("12-")      ' True  - nachgestelltes Vorzeichen ist erlaubt

    Debug.Print IsNumeric("12.3.4")   ' False - zwei Dezimalpunkte
    Debug.Print IsNumeric("")         ' False - leere Zeichenkette
    Debug.Print IsNumeric("2026-01-01") ' False - das ist ein Datum, nutzen Sie IsDate
End Sub

Was Sie lernen

  • Das mentale Modell — IsNumeric prüft, was VBA parsen könnte, nicht was Sie gemeint haben
  • Die drei Textprüfer steigender Stärke, und welche Frage jeder beantwortet
  • Warum wissenschaftliche Notation und Hex-Literale glatt durchrutschen
  • Warum Leerzeichen, Vorzeichen und Tausendertrennzeichen alle durchkommen
  • Warum IsNumeric gebietsschema-abhängig ist und wie das Daten zwischen Rechnern zerstört
  • IsNumeric vs IsNumber vs IsDate, und die strenge Prüfung, die Sie stattdessen nutzen sollten

Das mentale Modell: IsNumeric fragt, was VBA parsen könnte, nicht was Sie gemeint haben

IsNumeric ist kein Validator. Es ist eine Vorschau auf VBAs eigene Typumwandlung: Es liefert True für jede Zeichenkette, die CDbl (oder die implizite Umwandlung hinter der Val-artigen Zerlegung) ohne Fehler schlucken würde. Das ist eine bewusst großzügige Regel, denn VBAs numerischer Parser versteht wissenschaftliche Notation, hexadezimale und oktale Literale, Währungs- und Gruppierungssymbole sowie umgebende Leerzeichen.

Die richtige Frage in Ihrem Kopf lautet also nie „ist das eine Zahl?" Sie lautet: „würde VBA das in eine Zahl umwandeln, wenn ich es darum bäte?" — und die Antwort ist weit öfter Ja, als Ihnen lieb ist. Jede Überraschung weiter unten folgt direkt aus dieser einen Sichtweise.

Die drei Prüfer, in steigender Stärke

IsNumeric ist die erste Sprosse einer Leiter. Bevor Sie irgendeiner Zeichenkette trauen, prüfen Sie sie — und VBA reicht Ihnen drei Prüfer, jeder beantwortet eine andere Frage und jeder belügt Sie auf seine eigene Weise:

Prüfer Die Frage, die er beantwortet Seine charakteristische Lüge
IsNumeric Könnte VBA das als Zahl parsen? Sagt Ja zu "1E5", "&HFF", "12-"
Like Passt die ganze Zeichenkette auf diese Form? Groß-/Kleinschreibung hängt an einem modulweiten Schalter
RegExp Trifft es ein echtes Muster, und was steckt darin? Liefert nichts, bis Sie Global setzen und SubMatches erreichen

Greifen Sie zum schwachen, und schlechte Daten rutschen durch; greifen Sie zum schweren, und Sie ertrinken im Aufwand. Die Kunst ist zu wissen, welche Frage Sie tatsächlich stellen. IsNumeric beantwortet die lockerste Frage, was es am schnellsten griffbereit und am leichtesten falsch macht. Wenn „könnte eine Zahl sein" nicht eng genug ist — Sie brauchen genau drei Ziffern, oder einen positiven Betrag, oder einen Code ganz ohne Buchstaben — sind Sie von der untersten Sprosse gestiegen und wollen Like oder ein echtes Muster.

Falle 1: wissenschaftliche Notation und Hex-Literale rutschen glatt durch

Die zwei, die jeden erwischen: "1E5" und "&HFF".

Debug.Print IsNumeric("1E5")    ' True
Debug.Print CDbl("1E5")         ' 100000     <- E ist ein Exponent
Debug.Print IsNumeric("&HFF")   ' True
Debug.Print CLng("&HFF")        ' 255        <- &H ist ein Hex-Literal

Das ist kein Bug — das ist VBA, das konsequent bleibt. Aber es ist eine Datenkatastrophe, wenn das Feld ein Code ist und keine Menge. Eine Produkt-ID wie 1E5, ein Kontosuffix wie 12E3 oder eine Teilenummer, die zufällig mit &H beginnt, bestehen alle die Prüfung und werden dann still in eine große Ganzzahl verwandelt, sobald Sie umwandeln. Der Nutzer hat ein Etikett getippt; Ihr Makro hat eine Zahl in Millionenhöhe gespeichert und ist wortlos weitergezogen.

Soll die Spalte Bezeichner aufnehmen, ist IsNumeric das völlig falsche Tor — Sie wollen nicht „als Zahl parsbar", Sie wollen „genau diese Zeichen". Das ist eine Aufgabe für den Like-Operator oder einen schlichten Stringvergleich, nicht für IsNumeric.

Falle 2: Leerzeichen, Vorzeichen und Tausendertrennzeichen kommen alle durch

VBAs Parser ist nachsichtig mit der Kosmetik rund um eine Zahl, also liefern all diese True:

Debug.Print IsNumeric("  42  ")  ' True - umgebende Leerzeichen werden getrimmt
Debug.Print IsNumeric("+5")      ' True - fuehrendes Vorzeichen
Debug.Print IsNumeric("12-")     ' True - NACHGESTELLTES Vorzeichen (das beruehmte)
Debug.Print IsNumeric("1,000")   ' True - Tausendertrennzeichen
Debug.Print IsNumeric("(5)")     ' True - negativ im Buchhaltungsstil

Der Fall mit nachgestelltem Vorzeichen ("12-") überrascht fast jeden, und die Buchhaltungsklammern ("(5)") sind ein echter Fußschuss, wenn Sie einen Finanzexport einlesen und die Hälfte Ihrer negativen Werte in Klammern gehüllt ankommt. Umgekehrt kommen die Dinge, die Sie zu bestehen erwarten würden, nicht durch: ein Leerzeichen mittendrin ("1 2"), ein Bruch ("1/2") und eine leere Zeichenkette liefern alle False. Die Regel ist nicht „sieht nach Ziffern aus" — sie ist „passt auf eine von VBAs akzeptierten Zahlenformen", und diese Menge ist zugleich weiter und seltsamer als die Intuition.

Falle 3: es ist gebietsschema-abhängig und zerstört so Daten zwischen Rechnern

Das ist die leise Falle, die den Test übersteht und in der Produktion versagt. IsNumeric respektiert die Regionseinstellungen des Rechners für das Dezimal- und das Gruppierungstrennzeichen:

' Auf einem US-Rechner (Dezimal = ".")
Debug.Print IsNumeric("1,5")   ' False - das Komma ist hier kein Dezimalpunkt
Debug.Print IsNumeric("1.5")   ' True

' Auf einem deutschen Rechner (Dezimal = ",")
Debug.Print IsNumeric("1,5")   ' True  - das Komma IST der Dezimalpunkt
Debug.Print IsNumeric("1.5")   ' True  - der Punkt wird als Gruppierungstrennzeichen gelesen

Dieselbe Arbeitsmappe, dasselbe Makro, zwei verschiedene Antworten, je nachdem, wer sie öffnet. Ein Prüfschritt, der an Ihrem Schreibtisch besteht, lässt das "1,5" einer Kollegin als 1.5 durch — oder weist es rundweg ab — und Sie werden es in keinem Test sehen. Kommt der Wert aus einer Datei, einer Webseite oder einer anderen Region, zerlegen Sie ihn selbst mit einer ausdrücklichen Annahme (CDbl achtet auf das Gebietsschema; Val behandelt . immer als Dezimalpunkt), statt darauf zu vertrauen, dass IsNumeric überall dasselbe bedeutet.

IsNumeric vs IsNumber vs IsDate

Drei Funktionen, nach denen Leute austauschbar greifen, drei verschiedene Aufgaben:

  • IsNumeric(x) — eine VBA-Funktion, die fragt, ob eine Zeichenkette als Zahl geparst werden könnte. Um diese geht es in diesem Artikel.
  • Application.WorksheetFunction.IsNumber(cell) — das Arbeitsblatt-ISNUMBER, das fragt, ob der gespeicherte Wert einer Zelle bereits vom Typ Zahl ist. Es parst keinen Text; IsNumber("123") auf einer textformatierten Zelle ist False, obwohl IsNumeric("123") True ist.
  • IsDate(x) — das Schwester-Tor für Datumsangaben. IsNumeric("2026-01-01") ist False; nutzen Sie IsDate für alles, was ein Datum sein soll, und beachten Sie, dass es genauso gebietsschema-abhängig ist wie IsNumeric.

Nutzen Sie IsNumber, wenn Sie nach einem Wert fragen, der bereits in einer Zelle steht; nutzen Sie IsNumeric, wenn Sie Text säubern, bevor Sie ihn umwandeln.

Die Meinung: IsNumeric ist ein billiges Tor, kein Validator

IsNumeric verdient seinen Platz als schnelle Abweisung von offensichtlichem Müll — einer leeren Zelle, einem Namen, einem verirrten Symbol. Lassen Sie es die billig hinauswerfen. Aber an dem Tag, an dem Ihre Regel enger ist als „könnte eine Zahl sein" — eine fünfstellige PLZ, eine positive Menge, ein Bestellcode ganz ohne Buchstaben — hört IsNumeric auf, ein Aktivposten zu sein, und wird zur trügerischen Sicherheit, denn es winkt wissenschaftliche Notation, Hex, aufgefüllte Zeichenketten und gebietsschema-spezifische Trennzeichen durch, die Sie nie akzeptieren wollten.

Der Ausweg ist, die Form auszusprechen. Für „genau drei Ziffern" s Like "###". Für „nur Ziffern, beliebig lang" Len(s) > 0 And Not (s Like "*[!0-9]*"). Für alles mit Struktur — eine Gruppe zum Herausziehen, ein Muster, das sich wiederholt — sind Sie an der Spitze der Leiter angekommen und wollen ein echtes Muster. Und was auch immer Sie durchlassen: wandeln Sie es sofort unter derselben Gebietsschema-Annahme um, mit der Sie getestet haben, damit „gültig" und „umgewandelt" nie auseinanderfallen können.

Wenn die Prüfung die ganze Aufgabe ist — beschreiben Sie sie stattdessen

Die halbe Zeit ist die eigentliche Aufgabe nicht „ist das numerisch", sondern „bereinige diese Spalte: streiche die Codes, die wie Zahlen aussehen, markiere die mit der falschen Ziffernzahl, wandle den Rest um und sag mir, welche Zeilen du angefasst hast." Wenn Sie erst IsNumeric, eine Like-Formprüfung, eine gebietsschema-bewusste Umwandlung und ein Protokoll der Ausnahmen aneinandergekettet haben, erschlägt die Verkabelung die Antwort. ExcelMaster lässt Sie dieses Ziel in normaler Sprache formulieren — „prüfe Spalte C auf positive ganze Mengen, liste jede Zeile, die durchfällt, und warum" — und erzeugt Python, das die Daten liest, die echte Regel anwendet, zuerst Ihre Datei sichert und die Ausnahmen zurückgibt. Sie beschreiben die Prüfung; es kümmert sich um die wissenschaftliche Notation, die Auffüllung und das Gebietsschema.

Häufig gestellte Fragen

Was macht IsNumeric in VBA?

IsNumeric(expression) liefert einen Boolean: True, wenn VBA den Ausdruck in eine Zahl umwandeln könnte, sonst False. Es ist großzügig — es akzeptiert wissenschaftliche Notation, hexadezimale (&H) und oktale (&O) Literale, Tausendertrennzeichen, umgebende Leerzeichen sowie führende oder nachgestellte Vorzeichen — es bedeutet also „als Zahl parsbar", nicht „eine saubere Ganzzahl".

Warum liefert IsNumeric True für einen Wert, der keine Zahl ist?

Weil der Wert einer ist, den VBAs Parser erkennt. "1E5" ist wissenschaftliche Notation, "&HFF" ein Hex-Literal, "1,000" nutzt ein Tausendertrennzeichen und "12-" hat ein nachgestelltes Vorzeichen — für VBA alles gültige Zahlenformen. Brauchen Sie eine strengere Definition, prüfen Sie die Form mit Like (zum Beispiel s Like "###" für genau drei Ziffern) statt mit IsNumeric.

Wie prüfe ich in VBA, ob eine Zeichenkette nur aus Ziffern besteht?

Nutzen Sie ein Like-Muster statt IsNumeric. Len(s) > 0 And Not (s Like "*[!0-9]*") ist nur dann True, wenn s nicht leer ist und kein Nicht-Ziffern-Zeichen enthält — eine echte Nur-Ziffern-Prüfung, die anders als IsNumeric "1E5", "1,000" und "12-" abweist.

Was ist der Unterschied zwischen IsNumeric und IsNumber in VBA?

IsNumeric ist eine VBA-Funktion, die prüft, ob eine Zeichenkette als Zahl geparst werden könnte. WorksheetFunction.IsNumber (das Arbeitsblatt-ISNUMBER) prüft, ob der Wert einer Zelle bereits als Zahlentyp gespeichert ist. Eine Textzelle mit 123 ergibt IsNumeric = True, aber IsNumber = False.

Wirkt sich das Gebietsschema auf IsNumeric aus?

Ja. IsNumeric nutzt das Dezimal- und Gruppierungstrennzeichen des Rechners, also ist "1,5" numerisch auf einem Rechner, auf dem das Komma der Dezimalpunkt ist, und nicht auf einem, auf dem der Punkt es ist. Für portable Ergebnisse wandeln Sie mit einer ausdrücklichen Regel um (Val nutzt immer . als Dezimalpunkt; CDbl achtet auf das aktuelle Gebietsschema), statt sich darauf zu verlassen, dass IsNumeric sich überall gleich verhält.

Getestet in

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

Verwandte Anleitungen: VBA Like · VBA Regex · VBA CStr · VBA InStr · VBA Split