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 unaandoperació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 aBooleans . 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 losStringvalores "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
Variantcon el subtipoVT_EMPTY. De nuevo, esto se puede confirmar con una macro:Entonces, ¿qué sucede cuando la
ANDfunció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
TRUEy B1 contiene texto precedido por un apóstrofe:,'FALSEentonces=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
A1tiene 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.