TL;DR —
IsNumeric(value)liefertTrue, 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 sagtTruezu"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
IsNumbervsIsDate, 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 istFalse, obwohlIsNumeric("123")Trueist.IsDate(x)— das Schwester-Tor für Datumsangaben.IsNumeric("2026-01-01")istFalse; nutzen SieIsDatefür alles, was ein Datum sein soll, und beachten Sie, dass es genauso gebietsschema-abhängig ist wieIsNumeric.
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
