Я наткнулся на этот вопрос и заметил странный способ, которым Excel оценивает функции AND
и OR
.
Вопрос был о том, чтобы найти некоторые текстовые строки в ячейкес SEARCH
.Исходная формула:
=IF(B1="","",IF(AND(ISNUMBER(SEARCH("minimum",B1)),ISNUMBER(SEARCH("maximum",B1)),ISNUMBER(SEARCH("range",B1)),NOT(ISNUMBER(SEARCH({"mean","median","mean absolute deviation","interquartile range"},B1)))),2,1))
, но интересная часть происходит в AND([...]SEARCH({"mean","median",[...]},B1)
Я не знал, что можно передать матричные аргументы в функцию поискабез определения его в качестве матрицы-функции ( Ctrl + Enter ), поэтому я решил попробовать.
Значение B1 равно test2 .
Вот формулы с выводами:
=SEARCH({"test1","test2"},B1)
возвращает #VALUE!
(Если значение в B1 равно test1, оно возвращает 1)
=ISNUMBER(SEARCH({"test1","test2"},B1))
возвращает FALSE
=OR(SEARCH({"test1","test2"},B1))
возвращает #VALUE!
=OR(ISNUMBER(SEARCH({"test1","test2"},B1)))
возвращает TRUE
Как это?
Если я запускаю формулупошагово Excel оценивает аргументы в другом порядке:
ISNUMBER(SEARCH({"test1","test2"},B1))
ISNUMBER(SEARCH("test1",B1))
ISNUMBER(SEARCH("test1","test2"))
ISNUMBER(#VALUE!)
- результат:
FALSE
НО:
Если он находится внутри OR
или AND
функция, она идет наоборот.
OR(ISNUMBER(SEARCH({"test1","test2"},B1)))
OR(ISNUMBER(SEARCH({"test1","test2"},"test2")))
OR(ISNUMBER({"#VALUE!",1}))
OR({FALSE,TRUE})
- результат:
TRUE
Я не понимаю логики, стоящей за шагами, чего я не понимаю
Поведение Excel в зависимости от того, находится ли формула внутри
AND
или
OR
.Может кто-нибудь объяснить это?
РЕДАКТИРОВАТЬ:
Кажется, вопрос недостаточно ясен.Мой вопрос:
Почему Excel оценивает аргументы функций (в данном случае SEARCH
) внутри оператора AND
или OR
в обратном порядке, позволяя, например, передать матрицу-значения в них?