Ich habe eine leere B2-Zelle.
= ISBLANK (B2) ergibt WAHR
Ein einfacher logischer Test gibt FALSE zurück
= WENN (B2, WAHR, FALSCH) ergibt FALSCH
Bei direkter Verwendung in einer AND-Anweisung wird jedoch TRUE zurückgegeben
= AND (B2, TRUE) ergibt TRUE
Wenn es indirekt in einer AND-Anweisung verwendet wird, gibt es natürlich 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?
IF(B2,TRUE,FALSE)
? Ich hoffte auch, dass die logisch korrekten (aber ein wenig kontraintuitiven) Konjunktionen und Disjunktionen der resultierenden leeren Mengen zurückgegeben würden, dhAND(B2)
wahr wären, solangeOR(B2)
falsch, aber Experimente zeigen, dass sie einen Fehler zurückgeben.TL; DR - Es ist ein Artefakt dafür, wie Excel Zelleninhalte intern speichert und austauscht. Eine leere Zelle ist eine VARIANT ohne Wert, die aufgrund des Umgangs von Programmiersprachen mit der Richtigkeit von Null- und Nicht-Null-Werten in FALSE konvertiert wird.
Das Verhalten
AND()
(und aller anderen logischen Funktionen) besteht darin, beide Argumente in Boolesche Werte umzuwandeln und dann eine logischeand
Operation für sie auszuführen . Sie können die Abdeckungen abziehen und mit dem Objektbrowser des Visual Basic-Editors überprüfen, wie sie im Excel-Objektmodell definiert sind:Beachten Sie, dass a
Boolean
und nicht a zurückgegeben wirdVariant
. Dies bedeutet, dass zu einem bestimmten Zeitpunkt während der Auswertung der Funktion alle Argumente inBoolean
s konvertiert werden müssen . Das tatsächlich beobachtete Verhalten weist darauf hin, dass dies zu Beginn der Verarbeitung erfolgt. Excel versucht, benutzerfreundlich zu sein, indem es versucht, alle Argumente zu konvertieren und die konvertierten Werte in der Berechnung zu verwenden, wenn dies erfolgreich ist. Dies kann demonstriert werden, indem dieString
Werte "True" und "False" an die Funktion übergeben werden:Es kann auch mit numerischen Argumenten demonstriert werden - es behandelt jeden Wert ungleich Null als wahr und Null als falsch:
Es hat das gleiche Verhalten in Kombinationen:
Inzwischen sollten Sie das Bild bekommen. Wie hängt das mit dem Testen einer leeren Zelle zusammen? Die Antwort darauf liegt darin, wie Excel den Inhalt einer Zelle intern speichert. Auch hier ist das Excel-Objektmodell aufschlussreich:
Beachten Sie, dass es sich um eine COM- VARIANT-Struktur handelt . Diese Struktur besteht im Wesentlichen aus zwei Teilen: einem Typ, der dem Code mitteilt, wie er zu interpretieren ist, und einem Datenbereich. Eine Zelle ohne Inhalt in Excel hat einen "Wert", der durch ein
Variant
mit dem Untertyp dargestellt wirdVT_EMPTY
. Dies kann wiederum mit einem Makro bestätigt werden:Was passiert also, wenn die
AND
Funktion das in ein konvertiertBoolean
? Gute Frage! Es ist zufällig falsch, ähnlich wie Programmiersprachen normalerweise Null behandeln:Sie können dasselbe Verhalten feststellen, indem Sie die Argumente vollständig weglassen :
... ist das Gleiche wie ...
... das ist das gleiche wie ...
...welches ist:
quelle
TRUE
und B1 enthält Text mit vorangestelltem Apostroph :,'FALSE
dann wird=AND(A1,B1)
TRUE zurückgegeben. mwa-ha-ha-ha.TRUE
und B1 einen beliebigen Textwert (einschließlich einer leeren Zeichenfolge) enthält , wird=AND(A1,B1)
zurückgegebenTRUE
.Laut meinem Kommentar zu @ jcbermus Antwort mit einer kleinen Korrektur:
Mit der Korrektur impliziert:
Das heißt, wenn die Zelle
A1
den Wert "abc" hat,=AND(A1,TRUE)
kehrt sie zurückTRUE
, kehrt aber=AND("abc",TRUE)
zurück#VALUE!
. Siehe Zeilen 9 bis 13 im Bild unten.Ist aber merkwürdiger geworden ...
quelle
=ISBLANK(B2)
Gibt WAHR, wenn B2 leer ist, kein Leerzeichen
=AND(B2,TRUE)
sollten=AND(B2="",TRUE)
Sie den Wert (B2 leer return True) und die zweite logische wahr und wird wieder wahr schreiben=IF(B2,TRUE,FALSE)
sein sollte=IF(B2="",TRUE,FALSE)
geben Wahr=AND(IF(B2,TRUE,FALSE),TRUE)
ist zu=AND(IF(B2="",TRUE,FALSE),TRUE)
wahren geben wirdimmer versuchen , alle Test und glaube nicht , dass Excel tun zu schreiben.
Denken Sie immer daran
Logical Test
, in Ihren Formeln nicht auf B2zu testen, wie die IF-Funktion
Excel AND Function verwendet wird
quelle
AND(B2,TRUE)
sollte auf keinen fallAND(B2="",TRUE)
im zusammenhang mit der frage stehen.