TL;DR —
IsEmptyschaut sich die Zelle gar nicht an. Es stellt einem Variant genau eine enge Frage: Hat er jemals einen Wert bekommen? Eine unberührte Zelle antwortet mit Ja. Eine Zelle mit einer Formel, die""liefert, mit einem Leerzeichen oder einem einzelnen Apostroph antwortet mit Nein, obwohl alle drei leer aussehen. Ein mehrzelliger Bereich antwortet immer mit Nein, eineString-Variable ebenso. Entscheiden Sie also vor jedem Test auf „leer“, welches Leer Sie meinen: Es wurde nie etwas eingegeben (IsEmpty), es wird nichts angezeigt (ein Längentest nach Trim, der Fehlerzellen überspringt) oder ein ganzer Bereich enthält nichts (CountAoderCountBlank).
If IsEmpty(Range("A2").Value) Then
Debug.Print "Nothing was ever entered in A2"
End If
Dies ist der erste Artikel einer Reihe darüber, einen Wert zu fragen, was er ist: hier
IsEmpty, dann VarType und TypeName, dann
IsNull. Die Idee der Reihe: Ein VBA-Wert trägt eine Typkennung getrennt von seinem
Inhalt, und jeder dieser Tests liest die Kennung, nicht das, wonach der Wert aussieht. Empty, Null, Nothing
und "" sehen alle nach nichts aus, und es sind vier verschiedene Kennungen.
Was Sie lernen
- Das mentale Modell: Empty ist eine Kennung, kein Aussehen
- Drei leer aussehende Zellen, die laut IsEmpty nicht leer sind
- Warum IsEmpty für einen Bereich oder eine String-Variable immer False ist
- Die leere Zelle, die 0 ist, und die Fehlerzelle, die abstürzt
- Welcher Test zu welcher Bedeutung von leer passt
- Empty, Null, Nothing und der leere String im Vergleich
Das mentale Modell: Empty ist eine Kennung, kein Aussehen
Ein Variant trägt zweierlei: eine Kennung, die angibt, welche Art von Wert er enthält, und den Wert selbst.
Empty ist eine dieser Kennungen. Sie bedeutet: Hier wurde nie ein Wert hineingeschrieben. Ein Variant,
den Sie deklarieren und nie zuweisen, ist Empty, und ebenso der .Value einer Zelle, in die nie jemand etwas
eingegeben hat.
IsEmpty liest nur die Kennung. Es schaut nie darauf, was die Zelle anzeigt, wie sie formatiert ist oder ob
eine Formel dahintersteht. Deshalb ist es präzise, und deshalb überrascht es auch: Eine Zelle kann genau wie
eine leere Zelle aussehen und trotzdem die Kennung String tragen.
Drei leer aussehende Zellen, die laut IsEmpty nicht leer sind
Tragen Sie Folgendes in A2, A3 und A4 ein, lassen Sie A5 unberührt und testen Sie alle vier:
| Zelle | Inhalt | Aussehen | IsEmpty(.Value) |
.Value = "" |
|---|---|---|---|---|
| A2 | =WENN(B2="";"";B2) |
leer | False | True |
| A3 | ein Leerzeichen | leer | False | False |
| A4 | ein einzelner Apostroph ' |
leer | False | True |
| A5 | nichts | leer | True | True |
A2 enthält eine Formel, deren Ergebnis ein String der Länge null ist; die Kennung ist also String, nicht Empty. A3 enthält einen String mit einem Zeichen. A4 enthält eine Textkonstante der Länge null: Der Apostroph ist das Präfixzeichen der Zelle, und die Zelle ist nicht leer. Nur A5 hat nie einen Wert bekommen.
Das ist die klassische Meldung „IsEmpty funktioniert nicht“. Es funktioniert; die Frage war falsch.
Tabellenfunktionen unterscheiden genauso: ISTLEER (ISBLANK) ist für A2 bis A4 FALSCH, und ANZAHL2 (COUNTA)
zählt alle drei mit.
Dieselbe Kennung begegnet Ihnen bei der Suche nach der letzten Zeile: End(xlUp) bleibt an einer Formel
stehen, die "" liefert, denn diese Zelle ist nicht leer. Die Anleitung zur letzten Zeile
behandelt diesen Fall.
Warum IsEmpty für einen Bereich oder eine String-Variable immer False ist
IsEmpty hat nur für einen einzelnen Variant eine Bedeutung. Zwei häufige Verwendungen liefern nie True:
' Ein mehrzelliger Bereich: .Value ist ein Array, und ein Array ist nicht Empty
If IsEmpty(Range("A2:A100").Value) Then ' nie True, auch wenn alle leer sind
' Eine typisierte Variable: ein String beginnt als "", ein Long als 0, nie Empty
Dim name As String
If IsEmpty(name) Then ' nie True
Bei einem Bereich liefert .Value ein zweidimensionales Array aus Variants, die Kennung ist also „Array“,
niemals Empty. Eine Variable vom Typ String, Long oder Date beginnt mit einem echten Wert ("", 0,
Mitternacht am 30. Dezember 1899), es gibt also nichts, was Empty sein könnte. Nur ein Variant kann Empty sein,
und Sie setzen ihn mit v = Empty zurück. Die Anleitung zu Datentypen erklärt,
warum typisierte Variablen nie leer beginnen.
Die leere Zelle, die 0 ist, und die Fehlerzelle, die abstürzt
Vergleiche mit Empty sind großzügig. VBA wandelt Empty in das um, womit es verglichen wird: 0 neben einer
Zahl, "" neben einem String. Eine leere Zelle ist also beidem gleich:
' A5 ist leer
Debug.Print Range("A5").Value = 0 ' True
Debug.Print Range("A5").Value = "" ' True
Die erste Zeile verursacht einen echten Datenfehler. Eine Schleife, die Nullumsätze mit If c.Value = 0 zählt,
zählt auch jede leere Zelle als Null, und ein Bericht über „Konten mit Saldo null“ enthält stillschweigend die
Konten, die nie ausgefüllt wurden. Prüfen Sie zuerst IsEmpty, wenn 0 und leer Verschiedenes bedeuten.
Die zweite Falle wirkt in die andere Richtung. Enthält eine Zelle einen Fehler wie #N/A (im deutschen Excel
#NV), ist ihr .Value ein Fehlerwert, und der Vergleich mit einem String schlägt fehl:
' A6 enthaelt =VLOOKUP(...), das #N/A geliefert hat
If Range("A6").Value = "" Then ' Run-time error 13: Type mismatch
Das ist Laufzeitfehler 13 Type mismatch (im deutschen Excel „Typen unverträglich“). Eine Leerprüfung, die beim
ersten Nachschlagefehler abstürzt, ist in Tabellen, die von SVERWEIS oder XVERWEIS gespeist werden, weit
verbreitet. Prüfen Sie IsError vor jedem Vergleich. Die Anleitung zur Fehlerbehandlung
behandelt Fehler 13 und seine Verwandten.
Welcher Test zu welcher Bedeutung von leer passt
Hinter „ist es leer“ stecken drei verschiedene Fragen. Jede hat ihren eigenen Test.
1. Wurde jemals etwas eingegeben? Verwenden Sie IsEmpty auf den Wert der Zelle. Das ist der richtige
Test für „ist diese Eingabezelle noch unberührt“ oder „finde die nächste freie Zeile“.
If IsEmpty(c.Value) Then c.Value = Date
2. Zeigt die Zelle nichts an? Behandeln Sie "", Leerzeichen und den Apostroph als leer, stürzen Sie aber
nie bei einem Fehler ab und behandeln Sie 0 nie als leer:
Function LooksBlank(ByVal c As Range) As Boolean
If IsError(c.Value) Then Exit Function ' #N/A ist nicht leer
LooksBlank = (Len(Trim$(CStr(c.Value))) = 0) ' "", Leerzeichen, Empty
End Function
CStr(Empty) ist "", eine wirklich leere Zelle besteht den Test also auch, und CStr(0) ist "0", eine
Null also nicht.
3. Ist der ganze Bereich leer? Keine Schleife und kein IsEmpty. Lassen Sie Excel zählen:
Dim rng As Range
Set rng = Range("A2:A100")
If Application.WorksheetFunction.CountA(rng) = 0 Then
Debug.Print "Nothing at all in the range, not even formulas"
End If
If Application.WorksheetFunction.CountBlank(rng) = rng.Cells.Count Then
Debug.Print "Every cell is blank or shows an empty string"
End If
CountA (ANZAHL2) zählt eine Formel, die "" liefert, als Wert; CountBlank (ANZAHLLEEREZELLEN) zählt sie als
leer. Wählen Sie die Funktion, die zur Frage passt. Bei einem womöglich sehr großen Bereich ist CountA
außerdem weit schneller als eine Schleife über die Zellen.
Empty, Null, Nothing und der leere String
Diese vier sehen im Debugger gleich aus und werden unterschiedlich geprüft:
| Wert | Bedeutung | Wo Sie ihm in Excel begegnen | Test |
|---|---|---|---|
| Empty | es wurde nie ein Wert zugewiesen | .Value einer unberührten Zelle; ein neuer Variant |
IsEmpty(v) |
"" |
ein String ohne Zeichen | eine Formel, die "" liefert; eine geleerte TextBox |
Len(v) = 0 |
| Null | unbekannt oder gemischt | Font.Bold eines Bereichs mit gemischten Formaten |
IsNull(v) |
| Nothing | eine Objektvariable, die auf kein Objekt zeigt | ein Find, das nichts gefunden hat |
obj Is Nothing |
Eine leere Zelle ist nie Null und nie Nothing; IsNull(Range("A5").Value) ist also False, und Range("A5")
ist nie Nothing. Die IsNull-Anleitung zeigt, wo Null tatsächlich herkommt, und die
Nothing-Anleitung behandelt Objektverweise.
Die Abwägung: Benennen Sie das Leer, das Sie meinen
Die meisten Fehler mit leeren Zellen sind keine Fehler in IsEmpty. Sie entstehen durch Code, der „leer“ sagt,
ohne zu sagen, welches Leer. Die Regel, die sie verhindert: Schreiben Sie die Bedeutung in den Namen des
Tests. IsEmpty für unberührte Eingabezellen, eine Funktion LooksBlank für Daten aus Formeln oder von
anderen Leuten, CountA oder CountBlank für ganze Bereiche und ein IsError-Schutz vor jedem Vergleich mit
"" oder 0.
Kommen die Daten aus einem Export oder von einem Kollegen, nehmen Sie LooksBlank als Standard an: Importierte
Tabellen stecken voller Leerzeichen und Formeln, die "" liefern, und kaum jemand meint „wurde nie etwas
eingetippt“, wenn er sagt, ein Kundenfeld sei leer.
Wie ExcelMaster hilft
Logik für leere Zellen ist schnell geschrieben und leicht subtil falsch: ein Bericht, der Leerzellen als Nullen
zählt, eine Schleife, die an der ersten Formel stoppt, eine Prüfung, die bei #N/A abstürzt.
ExcelMaster liest zuerst Ihr Blatt, erkennt,
welche „leeren“ Zellen wirklich leer sind, welche ""-Formeln oder Leerzeichen enthalten und welche Fehler, und
schreibt die Prüfung, die zu dem passt, was Ihre Daten tatsächlich enthalten.
Häufig gestellte Fragen
Wie prüfe ich in VBA, ob eine Zelle leer ist?
Verwenden Sie If IsEmpty(Range("A1").Value) Then. Das ist nur True, wenn nie etwas eingegeben wurde. Kann die
Zelle eine Formel enthalten, die "" liefert, oder verirrte Leerzeichen, verwenden Sie
Len(Trim$(CStr(c.Value))) = 0 nach einer IsError-Prüfung.
Warum liefert IsEmpty für eine leere Zelle False?
Weil die Zelle nicht leer ist: Sie enthält eine Formel, die einen leeren String liefert, ein Leerzeichen oder
einen einzelnen Apostroph. IsEmpty liest die Typkennung des Werts, nicht das, was die Zelle anzeigt.
Wie prüfe ich in VBA, ob ein Bereich leer ist?
Verwenden Sie Application.WorksheetFunction.CountA(rng) = 0. IsEmpty auf einen mehrzelligen Bereich ist immer
False, weil der Wert des Bereichs ein Array ist.
Was ist der Unterschied zwischen IsEmpty und einem Test auf leeren String in VBA?
IsEmpty ist nur für einen Wert True, der nie zugewiesen wurde. = "" ist für eine leere Zelle und für einen
leeren String True und löst den Fehler Type mismatch („Typen unverträglich“) aus, wenn die Zelle einen Fehlerwert
wie #N/A enthält.
Warum zählt meine leere Zelle als null?
VBA wandelt Empty in 0 um, wenn Sie es mit einer Zahl vergleichen; If c.Value = 0 ist für eine leere Zelle
also True. Prüfen Sie zuerst IsEmpty(c.Value), wenn leer und null Verschiedenes bedeuten.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 04.10.2026.
Verwandte Anleitungen: VBA VarType and TypeName · VBA IsNull · VBA Nothing · VBA IsNumeric · VBA Data Types · VBA Last Row · VBA Error Handling · VBA SpecialCells
