Die UND-Funktion liefert für eine leere, LEERE Zelle das Ergebnis WAHR – warum?

Die UND-Funktion liefert für eine leere, LEERE Zelle das Ergebnis WAHR – warum?

Ich habe eine leere B2-Zelle.

=ISTLEER(B2)ergibt WAHR

Ein einfacher logischer Test gibt FALSE zurück

=WENN(B2,WAHR,FALSCH)ergibt FALSCH

Wenn es jedoch direkt in einer AND-Anweisung verwendet wird, gibt es TRUE zurück.

=UND(B2,WAHR)ergibt WAHR

Natürlich gibt es bei indirekter Verwendung in einer AND-Anweisung immer noch FALSE zurück.

=UND(WENN(B2,WAHR,FALSCH),WAHR)ergibt FALSCH

Können Sie mir bitte erklären, warum sich mein Excel so verhält?

Antwort1

Extrahiert ausHier, suchen Sie nach dem Abschnitt mit dem TitelLogische Funktionen in Excel – Zahlen und Fakten:

Wenn Sie in Excel logische Funktionen (AND, XOR, NOT, OR) verwenden und eines der Argumente Textwerte enthält oderleere Zellen, solche Werte werden ignoriert.

Antwort2

Kurz zusammengefasst- Es ist ein Artefakt der internen Speicherung und des Austauschs von Zellinhalten in Excel. Eine leere Zelle ist eine VARIANTE ohne Wert, die aufgrund der Art und Weise, wie Programmiersprachen die Richtigkeit von Null- und Nicht-Null-Werten behandeln, in FALSE umgewandelt wird.

Das Verhalten von AND()(und allen anderen logischen Funktionen) besteht darin, beide Argumente in Boolesche Werte umzuwandeln und dann eine logische andOperation mit ihnen durchzuführen. Sie können die Abdeckungen entfernen und sich ansehen, wie es im Excel-Objektmodell definiert ist, indem Sie den Objektbrowser des Visual Basic-Editors verwenden:

UND im Objektbrowser

Beachten Sie, dass ein zurückgegeben wird Boolean.nichta Variant. Dies bedeutet, dass irgendwann während der Auswertung der Funktionalle Argumente müssen in Booleans umgewandelt werden. Das tatsächlich beobachtete Verhalten deutet darauf hin, dass dies früh in der Verarbeitung geschieht - Excel versucht, benutzerfreundlich zu sein, indem es versucht, alle Argumente zu konvertieren und dieumgewandeltWerte in der Berechnung, wenn sie erfolgreich ist. Dies kann demonstriert werden, indem man Stringder Funktion die Werte „True“ und „False“ übergibt:

=AND("true","true") <---Results in TRUE
=AND("false","true") <---Results in FALSE
Etc.

Dies kann auch mit numerischen Argumenten demonstriert werden – jeder Wert ungleich Null wird als wahr und Null als falsch behandelt:

=AND(42,-42) <---Results in TRUE
=AND(0,0) <---Results in FALSE
=AND(42,0) <---Results in FALSE
Etc.

Dasselbe Verhalten zeigt sich auch in Kombinationen:

=AND("false",0) <---Results in FALSE
Etc.

Jetzt sollten Sie sich ein Bild machen können. Was hat das nun mit dem Testen einer leeren Zelle zu tun? Die Antwort darauf liegt darin, wie Excel den Inhalt einer Zelle intern speichert. Auch hier ist das Excel-Objektmodell aufschlussreich:

Zellenwert im Objektbrowser

Beachten Sie, dass es sich um ein COM handeltVARIANT-Struktur. Diese Struktur besteht im Wesentlichen aus zwei Teilen - einem Typ, der dem Code, der sie verwendet, mitteilt, wie er sie interpretieren soll, und einem Datenbereich. Eine Zelle ohne Inhalt in Excel hat einen „Wert“, der durch ein Variantmit dem Untertyp dargestellt wird VT_EMPTY. Auch dies kann mit einem Makro bestätigt werden:

Sub DemoMacro()
    'Displays "True" if cell A1 on the active sheet has no contents.
    MsgBox Range("A1").Value2 = vbEmpty
End Sub

Was passiert also, wenn die ANDFunktion das in ein umwandelt Boolean? Gute Frage! Es ist zufällig False, ähnlich wie Programmiersprachen normalerweise Nullen behandeln:

Sub DemoMacro2()
    MsgBox CBool(vbEmpty)
End Sub

Dasselbe Verhalten können Sie beobachten beiWeglassenArgumente vollständig:

=AND(,)

...ist dasselbe wie...

=AND({vbEmpty},{vbEmpty})

...was dasselbe ist wie...

=AND(0,0)

...welches ist:

=AND(FALSE,FALSE)

Antwort3

Gemäß meinem Kommentar zu @jcbermus Antwort, mit einer kleinen Korrektur:

Wenn überhauptaber nicht allesder Argumente enthalten Textwerte InZellenwerte oder leere Zellen, solche Werte werden ignoriert.Aber wenn ALLE Argumente Textwerte enthalten InZellenwerte oder leere Zellen, die Funktion gibt#VALUE!

Mit der Korrektur impliziert:

Wenn eines oder mehrere der Argumente Text aus einem String-Literal und nicht Text aus einem Zellbezug sind, dann lautet das Ergebnis#VALUE!

Das heißt, wenn die Zelle A1den Wert „abc“ hat, =AND(A1,TRUE)wird zurückgegeben TRUE,Aber =AND("abc",TRUE)gibt zurück #VALUE!. Siehe Zeilen 9 bis 13 im Bild unten.

Bildbeschreibung hier eingeben

Aber es wirdFremder...

Wennbeliebigder Argumente ist ein Fehler, dann ANDwird dieErsteFehler.Außer, wenn eines der Argumente ein String-Literal ist, dann ist der Rückgabewert#VALUE!

=AND(TRUE,TRUE,"abc")=#VALUE!

=AND(1/0,foo(),TRUE)=#DIV/0!

=AND(foo(),1/0,TRUE)=#NAME?

=AND(1/0,foo(),"abc",TRUE)=#VALUE!

=AND(foo(),1/0,"abc",TRUE)=#VALUE!

Antwort4

=ISBLANK(B2)
gibt TRUE, wenn B2 leer ist und kein Leerzeichen

=AND(B2,TRUE) Sie müssen
=AND(B2="",TRUE)den Wert (B2 leer gibt True zurück) schreiben und der 2. logische Wert ist True und gibt True zurück.
=IF(B2,TRUE,FALSE)Sollte True geben. Sollte =IF(B2="",TRUE,FALSE)True geben.
=AND(IF(B2,TRUE,FALSE),TRUE)Sollte =AND(IF(B2="",TRUE,FALSE),TRUE)True geben.
Versuchen Sie immer, alle Tests zu schreiben und denken Sie nicht, dass Excel das tun wird.
Denken Sie immer daran Logical Test, in Ihren Formeln nicht auf B2 zu testen .
So verwenden Sie die WENN-Funktion
Excel UND-Funktion

verwandte Informationen