Tengo una celda B2 en blanco.
= ISBLANK (B2) da VERDADERO
Una simple prueba lógica en él devuelve FALSO
= SI (B2, VERDADERO, FALSO) da FALSO
Sin embargo, cuando se usa directamente en una instrucción AND, devuelve VERDADERO
= Y (B2, VERDADERO) da VERDADERO
Por supuesto, cuando se usa indirectamente en una declaración AND, aún devuelve FALSE
= Y (SI (B2, VERDADERO, FALSO), VERDADERO) da FALSO
¿Podría explicarme por qué mi Excel se comporta de esa manera?
IF(B2,TRUE,FALSE)
? Además, esperaba que se devolvieran las conjunciones y disyunciones lógicamente correctas (pero un poco contra-intuitivas) de los conjuntos vacíos resultantes, es decir,AND(B2)
serían verdaderas mientras que fueranOR(B2)
falsas, pero la experimentación muestra que devuelven un error.TL; DR : es un artefacto de cómo Excel almacena e intercambia el contenido de la celda internamente. Una celda vacía es una VARIANTE sin valor, que se convierte en FALSO debido a cómo los lenguajes de programación tratan la veracidad de los valores cero y no cero.
El comportamiento de
AND()
(y todas las demás funciones lógicas) es convertir ambos argumentos en booleanos y luego realizar unaand
operación lógica en ellos. Puede retirar las cubiertas y ver cómo se define en el modelo de objetos de Excel utilizando el Explorador de objetos del Editor de Visual Basic:Tenga en cuenta que devuelve a
Boolean
, no aVariant
. Esto significa que en algún momento durante el proceso de evaluación de la función, todos los argumentos tienen que convertirse aBoolean
s . El comportamiento real observado indica que esto se hace temprano en el procesamiento: Excel intenta ser fácil de usar al intentar convertir todos los argumentos y usar los valores convertidos en el cálculo si tiene éxito. Esto se puede demostrar pasando losString
valores "Verdadero" y "Falso" a la función:También se puede demostrar con argumentos numéricos: trata cualquier valor distinto de cero como verdadero y cero como falso:
Tiene el mismo comportamiento en combinaciones:
A estas alturas ya deberías hacerte una idea. Entonces, ¿cómo se relaciona esto con la prueba de una celda en blanco? La respuesta a esto radica en cómo Excel almacena el contenido de una celda internamente. Nuevamente, el modelo de objetos de Excel es esclarecedor:
Tenga en cuenta que es una estructura COM VARIANT . Esta estructura básicamente contiene 2 partes: un tipo, que le dice al código que lo usa cómo interpretarlo, y un área de datos. Una celda sin contenido en Excel tendrá un "valor" representado por a
Variant
con el subtipoVT_EMPTY
. De nuevo, esto se puede confirmar con una macro:Entonces, ¿qué sucede cuando la
AND
función convierte eso en aBoolean
? ¡Buena pregunta! Resulta que es falso, similar a cómo los lenguajes de programación suelen tratar cero:Puede ver el mismo comportamiento omitiendo argumentos por completo:
... es lo mismo que ...
... que es lo mismo que ...
...cual es:
fuente
TRUE
y B1 contiene texto precedido por un apóstrofe:,'FALSE
entonces=AND(A1,B1)
devuelve VERDADERO. mwa-ha-ha-ha.TRUE
, y B1 contiene cualquier valor de texto (incluyendo una cadena vacía) , entonces=AND(A1,B1)
regresaTRUE
.Según mi comentario sobre la respuesta de @ jcbermu, con una pequeña corrección:
Con la corrección implicando:
Es decir, si la celda
A1
tiene el valor "abc", entonces=AND(A1,TRUE)
regresaTRUE
, pero=AND("abc",TRUE)
regresa#VALUE!
. Vea las filas 9 a 13 en la imagen a continuación.Pero se vuelve más extraño ...
fuente
=ISBLANK(B2)
da VERDADERO si B2 está vacío, no espacio en blanco
=AND(B2,TRUE)
debe ser=AND(B2="",TRUE)
que debe escribir el valor (B2 vacío devuelve Verdadero) y el segundo lógico es Verdadero y devolverá Verdadero=IF(B2,TRUE,FALSE)
debe=IF(B2="",TRUE,FALSE)
dar Verdadero=AND(IF(B2,TRUE,FALSE),TRUE)
debe=AND(IF(B2="",TRUE,FALSE),TRUE)
dar VerdaderoIntente siempre escribir toda la prueba y no piense que Excel lo hará.
Recuerde siempre el
Logical Test
, en sus fórmulas no prueba para B2Cómo usar la función IF
Excel AND Function
fuente
AND(B2,TRUE)
definitivamente no debería estarAND(B2="",TRUE)
en el contexto de la pregunta.