Я пытаюсь классифицировать свои данные на основе строковых значений, содержащихся в конкретной ячейке. Т.е. Если ячейка P6 содержит слово "больница" или "санаторий", ячейка B2 должна указать ее категорию как "больницу", если P6 содержит "аэропорт", "терминал" или "авиация", B2 должна указать "аэропорт".

Сначала я попытал счастья с помощью функции If, однако мне не удалось их правильно вложить.

=IF(SEARCH("stadium",$P6)>=1,"Sport")

Это работает как положено. он либо печатает правильную категорию, либо выдает «VALUE! ошибка.

Однако, когда я пытаюсь расширить операторы, он не распознает добавленные поисковые термины.

=IF(SEARCH("stadium",$P6)>=1,"Sport",IF(SEARCH("sanatorium",$P6)>=1,"Hospital"))

Это все еще находит строку "стадион", но не признает "санаторий". Если P6 содержит слово "санаторий", это все равно дает мне # ЗНАЧЕНИЕ !.

Было бы здорово, если бы вы указали мне правильное направление или, альтернативно, как я мог бы достичь этого, используя альтернативные методы, такие как справочные таблицы.

1 ответ1

1

Это потому, что ПОИСК возвращает число или ошибку. Если слово не найдено, возвращается ошибка.

Так, если ячейка не содержит stadium ошибка #VALUE возвращается к первому ПОИСКУ, и вы не можете попытаться приравнять ее к числу, и вся цепочка коротких замыканий формулы и #VALUE возвращаются.

Используйте ISNUMBER чтобы преодолеть. ISNUMBER вернет FALSE если возвращение является ошибкой:

=IF(ISNUMBER(SEARCH("stadium",$P6)),"Sport",IF(ISNUMBER(SEARCH("sanatorium",$P6)),"Hospital"))

Теперь, когда вы выдвинули гипотезу, было бы лучше и проще создать таблицу с критериями поиска и ожидаемым результатом, а затем использовать формулу типа поиска для получения правильного результата:

=INDEX(F:F,AGGREGATE(15,6,ROW($E$1:INDEX(E:E,MATCH("zzz",E:E)))/(ISNUMBER(SEARCH($E$1:INDEX(E:E,MATCH("zzz",E:E)),A1))),1))

Это будет перебирать таблицу и возвращать первый результат первого совпадения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .