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

VBA IsNull in Excel — was Null wirklich bedeutet und warum = Null nie funktioniert

|

VBA IsNull in Excel — was Null wirklich bedeutet und warum = Null nie funktioniert

TL;DR — Null ist die Kennung für „keine eindeutige Antwort“. In Excel VBA bekommen Sie sie fast nie aus einer Zelle: Eine leere Zelle ist Empty, IsNull auf eine leere Zelle ist also immer False. Null bekommen Sie, wenn Sie eine Eigenschaft eines Bereichs lesen, dessen Zellen sich nicht einig sind, etwa Font.Bold über fette und normale Zellen, NumberFormat über gemischte Formate oder RowHeight über Zeilen unterschiedlicher Höhe, und wenn Sie ein Datenbankfeld lesen. Daraus folgen zwei Regeln: Prüfen Sie nur mit IsNull, denn x = Null ist selbst Null und nie True; und lesen Sie bereichsweite Eigenschaften in einen Variant, denn die Zuweisung von Null an einen Boolean, String oder Double bricht mit Fehler 94, Invalid use of Null ab (im deutschen Excel „Unzulässige Verwendung von Null“).

Dim bold As Variant
bold = Range("A1:A10").Font.Bold
If IsNull(bold) Then Debug.Print "Some cells are bold, some are not"

Dies ist der dritte Artikel einer Reihe darüber, einen Wert zu fragen, was er ist: IsEmpty für nie zugewiesene Werte, VarType und TypeName zum Lesen jeder Kennung und hier IsNull für die Kennung, die gemischt oder unbekannt bedeutet. Die Idee der Reihe: Ein VBA-Wert trägt eine Typkennung getrennt von seinem Inhalt, und diese Tests lesen die Kennung, nicht das, wonach der Wert aussieht.

Was Sie lernen

  • Das mentale Modell: Null bedeutet keine eindeutige Antwort
  • Woher Null in Excel kommt und woher nicht
  • Warum = Null nie funktioniert
  • Fehler 94, Invalid use of Null
  • Wie sich Null durch Ausdrücke ausbreitet
  • Einen gemischten Bereich als dritte Antwort behandeln
  • Null aus Datenbanken, an der Grenze

Das mentale Modell: Null bedeutet keine eindeutige Antwort

Empty bedeutet hat nie einen Wert bekommen. Null bedeutet es gibt keinen einzelnen Wert, den man geben könnte. Eine Frage wie „ist dieser Bereich fett?“ hat drei ehrliche Antworten: ja, nein und „teilweise“. VBA kennt keinen dritten Boolean, also antwortet es mit einem Variant, der Null enthält.

Sobald Sie Null als „die Zellen sind sich nicht einig“ oder „der Wert ist unbekannt“ lesen, ergibt sein Verhalten Sinn. Ein Vergleich mit einem unbekannten Wert hat ein unbekanntes Ergebnis. Eine Summe, die etwas Unbekanntes enthält, ist unbekannt. Und eine Boolean-Variable, die nur True oder False aufnimmt, hat keinen Platz für „teilweise“.

Woher Null in Excel kommt und woher nicht

Nicht aus Zellen. Der Wert einer leeren Zelle ist Empty, eine Zelle mit "" ist ein String, eine Fehlerzelle ist ein Error. IsNull(Range("A1").Value) ist für alle False, und deshalb schlägt IsNull als Test auf leere Zellen nie an. Dafür verwenden Sie IsEmpty.

Aus Bereichseigenschaften über Zellen, die sich nicht einig sind. Viele Range-Eigenschaften liefern Null, wenn die Zellen im Bereich keinen gemeinsamen Wert haben:

Eigenschaft über einen mehrzelligen Bereich Liefert Null, wenn
Font.Bold, Font.Italic manche Zellen fett oder kursiv sind, andere nicht
Font.Name, Font.Size, Font.Color die Zellen unterschiedliche Schriftarten, Größen oder Farben haben
NumberFormat die Zellen unterschiedliche Zahlenformate haben
HorizontalAlignment, WrapText die Zellen unterschiedlich ausgerichtet oder umbrochen sind
RowHeight, ColumnWidth Zeilen oder Spalten unterschiedlich groß sind
HasFormula manche Zellen Formeln enthalten, andere Konstanten
MergeCells, Locked manche Zellen verbunden oder gesperrt sind, andere nicht

Selection.Font.Bold über eine teilweise fette Markierung ist das Alltagsbeispiel: Weder True noch False beschreibt sie, also lautet die Antwort Null.

Von außerhalb von Excel. Ein Feld, das über ADO aus einer Datenbank gelesen wird, ist Null, wenn die Datenbankspalte NULL enthält.

Warum = Null nie funktioniert

Der erste Reflex ist ein Vergleich:

v = Range("A1:A10").Font.Bold
If v = Null Then Debug.Print "mixed"        ' gibt nie etwas aus
If v <> Null Then Debug.Print "not mixed"   ' gibt ebenfalls nie etwas aus

Jeder Vergleich mit Null ist selbst Null, denn der Vergleich mit etwas Unbekanntem ergibt etwas Unbekanntes. If behandelt eine Null-Bedingung als nicht True, also werden oben beide Zweige übersprungen, egal was v enthält. Es gibt keinen Kompilierfehler und keinen Laufzeitfehler; die Prüfung ist stillschweigend tot. IsNull(v) ist der einzige Test, der funktioniert.

Fehler 94, Invalid use of Null

Der zweite Reflex ist, den erwarteten Typ zu deklarieren:

Dim isBold As Boolean
isBold = Range("A1:A10").Font.Bold      ' Run-time error 94: Invalid use of Null

Das ist Laufzeitfehler 94 Invalid use of Null (im deutschen Excel „Unzulässige Verwendung von Null“). Es funktioniert auf jedem Testblatt, auf dem der Bereich ganz fett oder ganz normal ist, und scheitert, sobald ein Benutzer eine einzige Zelle fett gemacht hat. Dasselbe passiert mit Dim fmt As String: fmt = rng.NumberFormat bei gemischten Zahlenformaten, mit Dim h As Double: h = Rows("1:5").RowHeight bei Zeilen mit unterschiedlicher Zeilenhöhe und mit CStr(Null) oder CLng(Null). Nur ein Variant kann Null aufnehmen.

Die Lösung ist immer dieselbe: Bereichsweite Eigenschaften in einen Variant lesen, IsNull prüfen, dann umwandeln.

Dim fmt As Variant
fmt = rng.NumberFormat
If IsNull(fmt) Then
    Debug.Print "Mixed formats in " & rng.Address
Else
    Debug.Print "All cells use " & fmt
End If

Wie sich Null durch Ausdrücke ausbreitet

Null pflanzt sich durch Arithmetik und die meisten Funktionen fort, aber nicht durch den Operator &:

Dim n As Variant
n = Null
Debug.Print n + 1            ' Null
Debug.Print Len(n)           ' Null
Debug.Print "Total: " + n    ' Null   (+ pflanzt Null fort)
Debug.Print "Total: " & n    ' Total: (& behandelt Null als "")

Ein Null, das in eine Berechnung gerät, wandert also bis zu deren Ende und scheitert erst, wenn es eine typisierte Variable oder eine Funktion erreicht, die einen echten Wert braucht. Der Fehler 94, den Sie sehen, kann mehrere Zeilen nach der Stelle liegen, an der Null hereinkam. Wenn Sie auf Fehler 94 stoßen, suchen Sie die erste Eigenschaft oder das erste Feld, das in diesem Ausdruck gelesen wird, nicht die Zeile, die gescheitert ist.

Einen gemischten Bereich als dritte Antwort behandeln

Gemischt ist kein Fehler, sondern eine Information. Entscheiden Sie, was Ihr Makro damit tun soll. Eine verbreitete Regel — die, nach der auch die Schaltfläche Fett in Word arbeitet — lautet: Eine gemischte Markierung wird komplett fett. Ein Umschalter, der nur mit Not geschrieben ist, kann diese Entscheidung nicht treffen, denn Not Null ist Null:

Sub ToggleBold()
    Dim rng As Range, state As Variant
    If TypeName(Selection) <> "Range" Then Exit Sub
    Set rng = Selection
    state = rng.Font.Bold
    If IsNull(state) Then
        rng.Font.Bold = True            ' gemischt: alles fett machen
    Else
        rng.Font.Bold = Not state
    End If
End Sub

Dasselbe Muster gilt für jede Eigenschaft in der Tabelle oben: in einen Variant lesen, dem gemischten Fall einen eigenen Zweig geben, dann handeln. Bei Spaltenbreiten und Zeilenhöhen heißt der gemischte Zweig meist „alle auf einen Wert setzen“; bei NumberFormat meist „melden, welche Zellen abweichen“, bevor Sie etwas überschreiben.

Null aus Datenbanken, an der Grenze

Wenn Sie Datensätze mit ADO lesen, kommt jede NULL-Spalte als Null an und scheitert, sobald Sie sie in eine typisierte Variable stecken oder zu einer Summe addieren. Wandeln Sie sie einmal um, dort, wo sie in Ihren Code eintritt. Excel VBA hat keine Funktion Nz (die gibt es in Access), also schreiben Sie eine kleine:

Function NzV(ByVal v As Variant, Optional ByVal ifNull As Variant = "") As Variant
    If IsNull(v) Then NzV = ifNull Else NzV = v
End Function

total = total + NzV(rs!Amount, 0)
customer = NzV(rs!CustomerName, "")

Ein ganzes Recordset mit Range.CopyFromRecordset ins Blatt zu schreiben braucht keine Umwandlung: Null-Felder werden zu leeren Zellen.

Die Abwägung: Null ist eine dritte Antwort, kein Fehler

Die meisten Null-Fehler sind Typdeklarationen, die keinen Platz für „teilweise“ gelassen haben. Die Regel, die sie verhindert: Jede Eigenschaft, die aus einem mehrzelligen Bereich gelesen wird, kommt in einen Variant, und der gemischte Fall bekommt seinen eigenen Zweig. Vergleichen Sie nie mit = Null; geben Sie eine bereichsweite Eigenschaft nie direkt in einen Boolean, String oder Double.

Und greifen Sie nicht zu IsNull, um Zellen zu prüfen. Eine leere Zelle ist Empty, eine geleerte Eingabe ist "", ein fehlgeschlagenes Nachschlagen ist ein Error. Wenn Ihr Code Zellen mit IsNull prüft, ist der Test, den Sie eigentlich wollen, IsEmpty, Len oder IsError.

Wie ExcelMaster hilft

Code, der Formatierungen liest, bricht meist an echten Arbeitsmappen, in denen ein Bereich nie ganz einheitlich ist: eine fette Zelle, eine verbundene Überschrift, eine Zeile, die etwas höher ist als die anderen.

ExcelMaster untersucht die Formatierung des tatsächlichen Bereichs, bevor es Code schreibt, erkennt, wo sich Zellen unterscheiden, und behandelt den gemischten Fall ausdrücklich, statt ihn Fehler 94 zu überlassen.

Häufig gestellte Fragen

Was macht IsNull in VBA?

IsNull(v) liefert True, wenn v ein Variant ist, der Null enthält — den Wert, der „keine eindeutige Antwort“ oder „unbekannt“ bedeutet. In Excel begegnet er Ihnen meist bei Bereichseigenschaften über Zellen, die sich nicht einig sind, und bei Datenbankfeldern.

Warum liefert IsNull für eine leere Zelle False?

Weil eine leere Zelle Empty ist, nicht Null. Verwenden Sie IsEmpty(Range("A1").Value), um auf eine Zelle zu prüfen, die nie ausgefüllt wurde.

Was verursacht Laufzeitfehler 94 Invalid use of Null?

Die Zuweisung von Null an eine Variable, die es nicht aufnehmen kann, etwa einen Boolean, String, Long oder Double, oder die Übergabe von Null an eine Funktion wie CStr. Lesen Sie den Wert in einen Variant und prüfen Sie zuerst IsNull.

Warum funktioniert If x = Null in VBA nie?

Jeder Vergleich mit Null liefert Null, und If behandelt Null als nicht True. Sowohl x = Null als auch x <> Null werden übersprungen. Verwenden Sie IsNull(x).

Wie prüfe ich in VBA, ob ein Bereich gemischte Formatierung hat?

Lesen Sie die Eigenschaft in einen Variant und prüfen Sie sie: If IsNull(rng.Font.Bold) Then. Eigenschaften wie Font.Bold, NumberFormat, RowHeight und HorizontalAlignment liefern Null, wenn sich die Zellen unterscheiden.

Getestet in

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

Verwandte Anleitungen: VBA IsEmpty · VBA VarType and TypeName · VBA Nothing · VBA Font · VBA Number Format · VBA Column Width · VBA Data Types · VBA Error Handling