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

VBA IsEmpty in Excel — prüfen, ob eine Zelle leer ist (und warum eine leer aussehende Zelle es nicht ist)

|

VBA IsEmpty in Excel — prüfen, ob eine Zelle leer ist (und warum eine leer aussehende Zelle es nicht ist)

TL;DR — IsEmpty schaut 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, eine String-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 (CountA oder CountBlank).

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