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,
IsNullauf eine leere Zelle ist also immer False. Null bekommen Sie, wenn Sie eine Eigenschaft eines Bereichs lesen, dessen Zellen sich nicht einig sind, etwaFont.Boldüber fette und normale Zellen,NumberFormatüber gemischte Formate oderRowHeightüber Zeilen unterschiedlicher Höhe, und wenn Sie ein Datenbankfeld lesen. Daraus folgen zwei Regeln: Prüfen Sie nur mitIsNull, dennx = Nullist selbst Null und nie True; und lesen Sie bereichsweite Eigenschaften in einenVariant, denn die Zuweisung von Null an einenBoolean,StringoderDoublebricht 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
