У меня есть пустая ячейка B2.
= ISBLANK (B2) дает ИСТИНА
Простой логический тест возвращает FALSE
= ЕСЛИ (В2, ИСТИНА, ЛОЖЬ) дает ЛОЖЬ
Тем не менее, при непосредственном использовании в операторе AND он возвращает TRUE
= И (В2, ИСТИНА) дает ИСТИНА
Конечно, при косвенном использовании в выражении AND он по-прежнему возвращает FALSE
= И (ЕСЛИ (В2, ИСТИНА, ЛОЖЬ), ИСТИНА) дает ЛОЖЬ
Не могли бы вы объяснить, почему мой Excel так себя ведет?
IF(B2,TRUE,FALSE)
? Кроме того, я надеялся, что будут возвращены логически правильные (но немного нелогичные) конъюнкции и дизъюнкции получающихся пустых множеств, т.AND(B2)
Е. Будут истинными, в то время какOR(B2)
ложными, но эксперименты показывают, что они возвращают ошибку.TL; DR - это артефакт того, как Excel хранит и обменивается содержимым ячейки внутри. Пустая ячейка - это VARIANT без значения, который конвертируется в FALSE из-за того, как языки программирования обрабатывают достоверность нулевых и ненулевых значений.
Поведение
AND()
(и всех других логических функций) заключается в преобразовании обоих аргументов в логические значения, а затем в них выполняется логическаяand
операция. Вы можете откинуть обложки и посмотреть, как это определено в объектной модели Excel, используя Object Browser редактора Visual Basic:Обратите внимание , что она возвращает
Boolean
, неVariant
. Это означает, что в какой-то момент в процессе оценки функции все аргументы должны быть преобразованы вBoolean
s . Фактическое наблюдаемое поведение указывает на то, что это делается на ранней стадии обработки - Excel пытается быть удобной для пользователя, пытаясь преобразовать все аргументы и используя преобразованные значения в вычислении, если это удастся. Это можно продемонстрировать, передав функцииString
"True" и "False":Это также может быть продемонстрировано с помощью числовых аргументов - оно обрабатывает любое ненулевое значение как true, а ноль - как false:
Такое же поведение в комбинациях:
К настоящему времени вы должны получить картину. Итак, как это относится к тестированию пустой ячейки? Ответ заключается в том, как Excel хранит содержимое ячейки внутри. Опять же, объектная модель Excel поучительна:
Обратите внимание, что это структура COM VARIANT . Эта структура в основном содержит 2 части - тип, который сообщает коду, использующему его, как его интерпретировать, и область данных. Ячейка без содержимого в Excel будет иметь «значение», которое представлено
Variant
с подтипомVT_EMPTY
. Опять же, это можно подтвердить с помощью макроса:Так что же происходит, когда
AND
функция преобразует это вBoolean
? Хороший вопрос! Это ложно, похоже на то, как языки программирования обычно обрабатывают ноль:Вы можете увидеть то же поведение, опуская аргументы полностью:
... это то же самое, что и ...
... который так же, как ...
...который:
источник
TRUE
а B1 содержит текст, которому предшествует апостроф:,'FALSE
тогда=AND(A1,B1)
возвращается TRUE. МДЖ-ха-ха-ха.TRUE
, а B1 содержит любое текстовое значение (включая пустую строку) , тогда=AND(A1,B1)
возвращаетсяTRUE
.Согласно моему комментарию к ответу @ jcbermu, с небольшим исправлением:
С учетом коррекции:
То есть, если ячейка
A1
имеет значение «abc», то=AND(A1,TRUE)
возвращаетсяTRUE
, но=AND("abc",TRUE)
возвращается#VALUE!
. Смотрите строки с 9 по 13 на изображении ниже.Но становится страннее ...
источник
=ISBLANK(B2)
дает TRUE, если B2 пустое, а не пустое место
=AND(B2,TRUE)
должно быть ,=AND(B2="",TRUE)
вы должны записать значение (B2 пустого возвращающие) и вторые логический истинна и возвратите Правду=IF(B2,TRUE,FALSE)
должна быть=IF(B2="",TRUE,FALSE)
даст Правду=AND(IF(B2,TRUE,FALSE),TRUE)
должна быть=AND(IF(B2="",TRUE,FALSE),TRUE)
дадут ИстинныеСтараются всегда писать все испытания и не думаете , что Excel будет делать.
Всегда помните
Logical Test
, что в ваших формулах нет теста на B2.Как использовать функцию IF,
Excel и функцию.
источник
AND(B2,TRUE)
определенно не должно бытьAND(B2="",TRUE)
в контексте вопроса.