J'ai une cellule B2 vierge.
= ISBLANK (B2) donne VRAI
Un simple test logique dessus renvoie FAUX
= SI (B2, VRAI, FAUX) donne FAUX
Pourtant, lorsqu'il est directement utilisé dans une instruction AND, il renvoie VRAI
= ET (B2, VRAI) donne VRAI
Bien sûr, lorsqu'il est indirectement utilisé dans une instruction AND, il renvoie toujours FALSE
= ET (SI (B2, VRAI, FAUX), VRAI) donne FAUX
Pourriez-vous m'expliquer pourquoi mon Excel se comporte de cette façon?
IF(B2,TRUE,FALSE)
? En outre, j'espérais que les conjonctions et les disjonctions logiquement correctes (mais un peu contre-intuitives) des ensembles vides résultants seraient retournées, c'estAND(B2)
-à- dire qu'elles seraient vraies alorsOR(B2)
qu'elles étaient fausses, mais l'expérimentation montre qu'elles renvoient une erreur.TL; DR - C'est un artefact de la façon dont Excel stocke et échange le contenu des cellules en interne. Une cellule vide est un VARIANT sans valeur, qui se transforme en FAUX en raison de la façon dont les langages de programmation traitent la véracité des valeurs nulles et non nulles.
Le comportement de
AND()
(et de toutes les autres fonctions logiques) consiste à convertir les deux arguments en booléens, puis à effectuer uneand
opération logique sur eux. Vous pouvez retirer les couvertures et voir comment il est défini dans le modèle d'objet Excel à l'aide de l'Explorateur d'objets de Visual Basic Editor:Notez qu'il renvoie un
Boolean
, pas unVariant
. Cela signifie qu'à un certain moment du processus d'évaluation de la fonction, tous les arguments doivent être convertis enBoolean
s . Le comportement réel observé indique que cela est fait au début du traitement - Excel essaie d'être convivial en tentant de convertir tous les arguments et en utilisant les valeurs converties dans le calcul s'il réussit. Cela peut être démontré en passant lesString
valeurs "True" et "False" à la fonction:Cela peut également être démontré avec des arguments numériques - il traite toute valeur non nulle comme vraie et zéro comme fausse:
Il a le même comportement dans les combinaisons:
Vous devriez maintenant avoir l'image. Alors, comment cela se rapporte-t-il au test d'une cellule vide? La réponse à cela réside dans la façon dont Excel stocke le contenu d'une cellule en interne. Encore une fois, le modèle d'objet Excel est éclairant:
Notez qu'il s'agit d'une structure COM VARIANT . Cette structure contient essentiellement 2 parties - un type, qui indique au code l'utilisant comment l'interpréter, et une zone de données. Une cellule sans contenu dans Excel aura une "valeur" qui est représentée par un
Variant
avec le sous-typeVT_EMPTY
. Encore une fois, cela peut être confirmé par une macro:Alors, que se passe-t-il lorsque la
AND
fonction convertit cela en unBoolean
? Bonne question! Cela se trouve être faux, semblable à la façon dont les langages de programmation traitent généralement zéro:Vous pouvez voir le même comportement en omettant complètement les arguments:
... c'est la même chose que ...
... qui est le même que ...
...lequel est:
la source
TRUE
et B1 contient du texte précédé d'une apostrophe:,'FALSE
alors=AND(A1,B1)
renvoie VRAI. mwa-ha-ha-ha.TRUE
et B1 contient n'importe quelle valeur de texte (y compris une chaîne vide) ,=AND(A1,B1)
retourneTRUE
.Selon mon commentaire sur la réponse de @ jcbermu, avec une petite correction:
Avec la correction impliquant:
Autrement dit, si la cellule
A1
a la valeur "abc", puis=AND(A1,TRUE)
retourneTRUE
, mais=AND("abc",TRUE)
revient#VALUE!
. Voir les lignes 9 à 13 dans l'image ci-dessous.Mais ça devient plus étrange ...
la source
=ISBLANK(B2)
donne VRAI si B2 est vide, pas d'espace vide
=AND(B2,TRUE)
devrait être=AND(B2="",TRUE)
vous devez écrire la valeur (B2 vide retourne True) et la deuxième logique est True et retournera True=IF(B2,TRUE,FALSE)
devrait être=IF(B2="",TRUE,FALSE)
donnera True=AND(IF(B2,TRUE,FALSE),TRUE)
devrait être=AND(IF(B2="",TRUE,FALSE),TRUE)
donnera TrueEssayez toujours d'écrire tout le test et ne pensez pas qu'Excel fera l'affaire.
Rappelez-vous toujours que
Logical Test
, dans vos formules, ne testez pas B2Comment utiliser la fonction IF
Excel AND Function
la source
AND(B2,TRUE)
ne devrait certainement pas êtreAND(B2="",TRUE)
dans le contexte de la question.