Страницы: 1
RSS
Поиск вхождений по списку искомых значений (не работает готовое решение)
 
Добрый день, коллеги.

Помогите разобраться, почему не работает найденное на форуме решение. Точнее, иногда работает, а иногда нет.
Задача: есть список паттернов (потенциальных вхождений), которые надо найти в строке.
Желаемый результат: ИСТИНА если хотя бы один паттерн найден, ЛОЖЬ, если не найден ни один.
(конечный результат - условное форматирование списка значений, найдены паттерны или нет)

Подходящее решение нашел вот тут http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=8&TID=6361
Полностью скопированная формула из файла решения работает, а если ее изменить под другие нужды - нет!

В прилагаемом файле формула в столбце 3 дает нужный результат (это копия формулы из найденного решения), а более простая в столбце 2 не работает (ищет только первый паттерн).

Если прогнать формулы через пошаговое вычисление, то видно, что для формулы из столбца 3 вычисляется массив констант, а для формулы из столбца 2 - только первое значение. Причем происходит это, видимо, потому, что ссылка на массив паттернов появляется в формуле 2 раза.

По какой причине такое происходит?
Изменено: skogkatt - 09.07.2017 21:09:45 (опечатка в слове "пошаговое", искажающая смысл)
 
Какое решение, покажите в файле примере.
Алексей М.
 
АlехМ, извините, нажал на отправку незаконченного сообщения (тег вводил, и по Enter'у стукнул)
Приложил файл и скрины.
 
skogkatt,наступите на ячейку B5. Нажмите F2, затем F9 и Вы увидите, что формула возвращает массив {#ЗНАЧ!;4;#ЗНАЧ!}
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
UPD
Еще покопался, и пришел к окончательному виду формулы, которая мне нужна, в ней ссылка резолвится в правильный массив.

Конечная-то задача решена (найти вхождение по списку), но все равно неприятно, что в некоторых случаях формула массива может не сработать, то есть не выдать массив констант при вычислении. Хорошо бы понимать на будущее - в каких именно случаях.
Изменено: skogkatt - 09.07.2017 16:02:41 (Приложил неправильный скриншот)
 
Bema, спасибо, увидел!
То есть, ссылка резолвится правильно, просто конечное значение не-ошибочно только в том случае, если найден первый элемент из массива! (соответственно, просто формула кривая  :)  и руки)

Таким образом, проблема не в формуле [успокаивается], а в диалоге "Вычисление" (см. первый скрин), который в данном случае показал этапы вычисления неправильно. Что тоже не фонтан, конечно..
 
skogkatt, точно прокомментировать эту фишку не могу, но столкнулся с этим давно. И пока не знал про F2 и F, приходилось извращаться, что бы увидеть, что формула действительно работает как массивная.Вот такая формула через Вычислить формулу не работает как массивная:
=ЕЧИСЛО(НАЙТИ(Условие2;A4))
А если добавить СУММПРОИЗВ, то через вычислить формулу видно, что работает как массивная:
=СУММПРОИЗВ(ЕЧИСЛО(НАЙТИ(Условие2;A4)))
Мой окончательный вариант формулы:
=ВЫБОР(СУММПРОИЗВ(ЕЧИСЛО(НАЙТИ(Условие2;A4))*{1;2;3});"д";"сен";"ф")
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
=ПРОСМОТР(2;1/НАЙТИ(Условие2;A4);Условие2)
не массивная формула
Формулы для УФ
=ИЛИ(ЕЧИСЛО(НАЙТИ(Условие2;A4)))
=ИЛИ(СЧЁТЕСЛИ(A4;"*"&Условие2&"*"))
=ПРОСМОТР(2;1/НАЙТИ(Условие2;A4))
Изменено: АlехМ - 09.07.2017 16:20:42
Алексей М.
 
АlехМ, красиво!   :)  Спасибо.

Про ИЛИ( ЕЧИСЛО()) лучшее. А я-то никак не мог додуматься, что такого попроще сделать с получившимся массивом "нашлось / ошибка / ошибка"
 
Еще так можно для УФ
=СЧЁТ(НАЙТИ(Условие2;A4))
Изменено: АlехМ - 09.07.2017 16:47:17
Алексей М.
 
АlехМ, purrrrfect ))) Проще некуда
Страницы: 1
Наверх