HOWTO · VBA
So überprüfen Sie in Microsoft Excel VBA, ob eine Zelle leer ist
Dieser Artikel erklärt die Möglichkeiten, in Microsoft Excel VBA zu überprüfen, ob eine Zelle leer ist.
Auf dieser Seite
Für eine wirklich leere Arbeitsblattzelle ist IsEmpty(Range("A1").Value) die übliche VBA-Prüfung. Eine Formel, die keine Zeichen anzeigt, ist trotzdem eine Formel. Verwenden Sie daher einen Zeichenfolgenvergleich oder Len, wenn dieses Ergebnis als leer gelten soll. Wählen Sie die Prüfung, die zu dem passt, was Ihr Makro erkennen muss.
Möglichkeiten zum Überprüfen, ob eine Zelle leer ist
Excel-Zellen können Konstanten, Formeln oder gar keinen Wert enthalten. Das Empty von VBA ist ein Variant-Zustand, während Null ein eigenständiger Wert ist; keines von beiden ist mit einer Formel gleichzusetzen, die "" ergibt. Die Beispiele verwenden A2, nachdem die Zelle geleert wurde. Wenn Ihre Arbeitsmappe Formeln verwendet, entscheiden Sie vor der Wahl einer Methode, ob eine Formel mit dem Ergebnis "" als leer gelten soll.
Methode 1: Die Funktion IsEmpty
IsEmpty gibt True zurück, wenn sein Argument eine nicht initialisierte Variant-Variable ist. Eine Zelle mit einer Konstanten, einer Formel oder einem Fehlerwert ist keine nicht initialisierte Variant-Variable, selbst wenn eine Formel nichts anzeigt. Die folgende Syntaxdarstellung prüft A2; fügen Sie sie in ein Standard-VBA-Modul ein und führen Sie CheckA2 aus, nachdem Sie A2 geleert haben. VBA kann von der konfigurierten Beispiel-Laufzeitumgebung nicht ausgeführt werden, daher wird diese Prozedur nicht ausgeführt und es wird keine Laufzeitausgabe beansprucht. Kopieren Sie diese Zeilen in ein Standard-VBA-Modul:
Sub CheckA2()
If IsEmpty(Range("A2").Value) Then
MsgBox "A2 is blank"
Else
MsgBox "A2 contains a value or formula"
End If
End Sub
Bei der angegebenen Ausgangslage mit geleerter Zelle soll der If-Zweig A2 is blank anzeigen. Eine Formel in A2, die "" zurückgibt, nimmt den Else-Zweig, weil die Zelle weiterhin eine Formel enthält. Sie können auch das Range-Objekt übergeben, aber .Value macht den geprüften Wert explizit.
Die Abbildung unten zeigt ein separates Beispiel mit einer gefüllten Zelle: A1 enthält den Text „Not empty", während die Zeilen darunter leer sind. Für diese Ausgangslage gibt IsEmpty(Range("A1").Value) False zurück, weil A1 Text enthält.
IsBlankist der Name einer Excel-Arbeitsblattfunktion, keine VBA-Funktion, die Sie direkt aufrufen können. Wenn Sie das Verhalten einer Arbeitsblattfunktion benötigen, verwenden SieApplication.WorksheetFunction, sofern unterstützt, oder eine VBA-Prüfung, deren Semantik zur Aufgabe passt.
Methode 2: Vergleich mit vbNullString
vbNullString ist eine VBA-Konstante, die eine Zeichenfolge der Länge null darstellt; sie enthält nicht den Wert Null. If Range("A2").Value = vbNullString Then vergleicht den Zellwert mit dieser Zeichenfolge. Dadurch werden eine geleerte Zelle und ein Formelergebnis von "" als leer erkannt, was eine andere Frage beantwortet als IsEmpty. Für eine formelbewusste Prüfung, die Fehler vor dem Vergleich behandelt, verwenden Sie statt CheckA2 diese Prozedur. VBA kann von der konfigurierten Beispiel-Laufzeitumgebung nicht ausgeführt werden, daher wird die Prozedur nicht ausgeführt und es wird keine Laufzeitausgabe beansprucht. Kopieren Sie diese Zeilen in dasselbe Standard-VBA-Modul:
Sub CheckA2ForBlankResult()
If IsError(Range("A2").Value) Then
MsgBox "A2 contains an error"
ElseIf Range("A2").Value = vbNullString Then
MsgBox "A2 is blank or its formula returns an empty string"
Else
MsgBox "A2 contains a nonempty value"
End If
End Sub
Methode 3: Vergleich mit einer leeren Zeichenfolge
Der Vergleich mit dem Literal "" verhält sich beim Zeichenfolgenvergleich ähnlich: If Range("A2").Value = "" Then. Er ist nützlich, wenn sowohl eine geleerte Zelle als auch ein Formelergebnis von "" denselben Zweig nehmen sollen. Er beweist nicht, dass die Zelle keine Formel enthält oder wirklich leer ist. Prüfen Sie HasFormula separat, wenn der Unterschied wichtig ist, und testen Sie IsError in einem eigenen Zweig vor dem Vergleich, wenn Fehler möglich sind.
Methode 4: Die Funktion Len
Len gibt die Anzahl der Zeichen in einer Zeichenfolgendarstellung zurück. Die Bedingung If Len(Range("A2").Value) = 0 Then ist nützlich, wenn die Frage lautet, ob das Ergebnis null Zeichen hat. Sie kann auch auf ein Formelergebnis von "" zutreffen; sie unterscheidet dieses nicht von einer geleerten Zelle. Numerische Werte haben eine Zeichenfolgenlänge ungleich null, während Len auf einem Fehlerwert keine sichere allgemeine Prüfung ist. Verwenden Sie zuerst IsError, wenn Fehler möglich sind.
Methode 5: Die Funktionen Count und Counta
Count zählt numerische Zellen in einem Bereich; CountA zählt Zellen mit Daten, einschließlich Text und Formeln. Für eine einzelne Zelle bedeutet Application.WorksheetFunction.Count(Range("A2")) = 0, dass sie keinen numerischen Wert hat, nicht unbedingt, dass sie leer ist. CountA(Range("A2")) = 0 erkennt eine geleerte Zelle, aber eine Formel, die "" zurückgibt, wird trotzdem gezählt, weil die Zelle eine Formel enthält. Für einen Bereich aus mehreren Zellen geben diese Funktionen Anzahlen zurück; vergleichen Sie diese nur dann mit der Bereichsgröße, wenn Ihr Ziel ist festzustellen, ob jede Zelle das gewählte Kriterium erfüllt.
Methode 6: Die Funktion IsNull
IsNull prüft, ob eine Variant-Variable den VBA-Wert Null enthält, der oft für fehlende oder unbekannte Daten verwendet wird. Eine gewöhnliche leere Arbeitsblattzelle ist nicht Null, daher ist IsNull(Range("A2").Value) keine allgemeine Prüfung auf leere Zellen und gibt für das Beispiel mit geleerter Zelle False zurück. Verwenden Sie sie nur, wenn Ihre VBA-Datenquelle tatsächlich Null liefern kann und dies der Zustand ist, den Sie erkennen möchten.
Fazit
Für eine Zelle ohne Wert verwenden Sie IsEmpty auf ihrem .Value. Wenn eine Formel, die "" zurückgibt, ebenfalls den Leer-Zweig nehmen soll, vergleichen Sie mit vbNullString oder "", oder prüfen Sie Len gegen null. Count fragt, ob numerische Daten vorhanden sind; CountA fragt, ob die Zelle Daten oder eine Formel enthält. IsNull ist für den eigenständigen VBA-Wert Null gedacht. Schützen Sie Vergleiche und Len, wenn Arbeitsblattfehler möglich sind, und verwenden Sie HasFormula, wenn das Vorhandensein einer Formel wichtig ist.