Eu tenho uma célula B2 em branco.
= ISBLANK (B2) fornece VERDADEIRO
Um teste lógico simples retorna FALSE
= SE (B2, VERDADEIRO, FALSO) indica FALSO
No entanto, quando usado diretamente em uma instrução AND, ele retorna TRUE
= AND (B2, TRUE) fornece TRUE
Obviamente, quando usado indiretamente em uma declaração AND, ele ainda retorna FALSE
= AND (SE (B2; VERDADEIRO; FALSO); VERDADEIRO) indica FALSO
Você poderia me explicar por que meu Excel se comporta dessa maneira?
IF(B2,TRUE,FALSE)
? Além disso, eu esperava que as conjunções e disjunções logicamente corretas (mas um pouco contra-intuitivas) dos conjuntos vazios resultantes fossem retornadas, ou sejaAND(B2)
, fossem verdadeiras enquantoOR(B2)
fossem falsas, mas a experimentação mostra que elas retornam um erro.TL; DR - É um artefato de como o Excel armazena e troca o conteúdo da célula internamente. Uma célula vazia é uma VARIANTE sem valor, que se converte em FALSE devido a como as linguagens de programação tratam a veracidade dos valores zero e não zero.
O comportamento de
AND()
(e de todas as outras funções lógicas) é converter os dois argumentos em booleanos e executar umaand
operação lógica neles. Você pode retirar as capas e ver como elas são definidas no modelo de objeto do Excel usando o Navegador de objetos do Editor do Visual Basic:Observe que ele retorna a
Boolean
, não aVariant
. Isso significa que, em algum momento do processo de avaliação da função, todos os argumentos devem ser convertidos emBoolean
s . O comportamento real observado indica que isso é feito no início do processamento - o Excel tenta ser amigável ao tentar converter todos os argumentos e usar os valores convertidos no cálculo, se for bem-sucedido. Isso pode ser demonstrado passando osString
valores "Verdadeiro" e "Falso" para a função:Também pode ser demonstrado com argumentos numéricos - trata qualquer valor diferente de zero como verdadeiro e zero como falso:
Tem o mesmo comportamento em combinações:
Até agora você deve ter uma ideia. Então, como isso se relaciona ao teste de uma célula em branco? A resposta para isso está em como o Excel armazena o conteúdo de uma célula internamente. Novamente, o Modelo de Objetos do Excel é esclarecedor:
Observe que é uma estrutura COM VARIANT . Essa estrutura basicamente contém 2 partes - um tipo, que informa ao código que o usa como interpretá-lo e uma área de dados. Uma célula sem conteúdo no Excel terá um "valor" representado por a
Variant
com o subtipoVT_EMPTY
. Novamente, isso pode ser confirmado com uma macro:Então, o que acontece quando a
AND
função converte isso em aBoolean
? Boa pergunta! Por acaso, é False, semelhante a como as linguagens de programação normalmente tratam zero:Você pode ver o mesmo comportamento omitindo argumentos completamente:
... é a mesma coisa que ...
... que é o mesmo que ...
...qual é:
fonte
TRUE
e B1 contém texto precedida por um apóstrofo:'FALSE
, em seguida,=AND(A1,B1)
retorna TRUE. mwa-ha-ha-ha.TRUE
e B1 contiver qualquer valor de texto (incluindo uma sequência vazia) ,=AND(A1,B1)
retornaráTRUE
.Conforme meu comentário na resposta de @ jcbermu, com uma pequena correção:
Com a correção implicando:
Ou seja, se a célula
A1
tiver o valor "abc",=AND(A1,TRUE)
retornaráTRUE
, mas=AND("abc",TRUE)
retornará#VALUE!
. Veja as linhas 9 a 13 na imagem abaixo.Mas fica mais estranho ...
fonte
=ISBLANK(B2)
dá VERDADEIRO se B2 estiver vazio, não espaço em branco
=AND(B2,TRUE)
deve ser=AND(B2="",TRUE)
você tem que escrever o valor (B2 retorno vazio True) ea 2ª lógica é verdadeira e irá retornar True=IF(B2,TRUE,FALSE)
deve ser=IF(B2="",TRUE,FALSE)
trarão verdadeiro=AND(IF(B2,TRUE,FALSE),TRUE)
deve ser=AND(IF(B2="",TRUE,FALSE),TRUE)
trarão verdadeiroTente sempre escrever todo o teste e não acho Excel fará.
Lembre-se sempre de que
Logical Test
, em suas fórmulas, não teste para B2Como usar a função SE
Excel AND Function
fonte
AND(B2,TRUE)
definitivamente não deveria estarAND(B2="",TRUE)
no contexto da questão.