VLOOKUP (ПОИСКПОЗ) в Excel с подстановочными символами: как использовать — примеры и формулы

Если в ваших данных встречаются символы «*» или «?», VLOOKUP может интерпретировать их как шаблоны (wildcards) и возвращать неверные совпадения. В статье показано, почему это происходит и какие простые способы используют для получения точных (exact) совпадений, когда значения содержат символы-джокеры.

Приведены рабочие формулы для современных версий Excel (XLOOKUP, MS365) и для старых версий (VLOOKUP, INDEX/MATCH), а также примеры с ожидаемыми результатами.

В чём проблема: wildcards внутри данных

VLOOKUP и некоторые другие функции Excel поддерживают символы-джокеры: «*» соответствует любому набору символов, «?» — одному символу. Это полезно при поиске по шаблону, но мешает, если сами данные содержат «*» или «?».

В примере у нас есть столбец Key с такими значениями, как «d*ef», «de*» и «d*f». При поиске с помощью VLOOKUP некоторые результаты окажутся неправильными из‑за интерпретации символов как wildcards.

Например, ожидаемые результаты: для поиска «de*» ожидается значение 6 (когда ключ равен «de*»), а для поиска «d*f» ожидается 9 (когда ключ равен «d*f»). VLOOKUP может вернуть другие значения или зависеть от порядка строк.

Решение 1: Используйте XLOOKUP (современный Excel)

Если у вас есть XLOOKUP (современные версии Excel), используйте её — она по умолчанию делает точные соответствия и не интерпретирует значения как wildcards, если не включать режим сопоставления по шаблону.

Пример формулы (вставьте в ячейку и при необходимости растяните/используйте динамическое заполнение):

=XLOOKUP(D2:D7,$A$2:$A$9,$B$2:$B$9)

Примечание: в XLOOKUP параметр match_mode = 2 включает сопоставление с wildcard; по умолчанию этого не происходит, поэтому значения с «*» и «?» будут рассматриваться буквально.

Решение 2: Экранируйте символы-джокеры в VLOOKUP и XLOOKUP

Если вы хотите продолжать использовать VLOOKUP и при этом обеспечить поиск по точному тексту, экранируйте «*» (и при необходимости «?») заменой на «~*» (и «~?»). В Excel символ «~» используется как символ экранирования для wildcards.

Пример с VLOOKUP и обработкой ошибок (возвращает пустую строку вместо #N/A):

=IFNA(VLOOKUP(SUBSTITUTE(D2, "*", "~*"), $A$2:$B$9, 2, FALSE), "")

Если у вас MS365, формулу можно «разлить» для диапазона:

=IFNA(VLOOKUP(SUBSTITUTE(D2:D7, "*", "~*"), A2:B9, 2, FALSE), "")

Аналогичный подход с XLOOKUP (в примере используется режим 2 для демонстрации):

=XLOOKUP(SUBSTITUTE(D2:D7, "*", "~*"), A2:A9, B2:B9, "Oops Not Found!!", 2)

Замечания по экранированию

В примерах заменяется только символ «*». Если в ваших данных встречаются также «?», замените его на «~?» с помощью SUBSTITUTE аналогичным образом. Если в данных есть сам символ «~», его предварительно может понадобиться экранировать (заменить на «~~»).

Решение 3: Для старых версий Excel — INDEX/MATCH

Для более старых версий Excel, где XLOOKUP недоступен, можно использовать комбинацию INDEX и MATCH для точного поиска. В примере приведена формула, которая ищет точное совпадение в массиве:

=INDEX($B$2:$B$9,MATCH(1,N($A$2:$A$9=C2),0))

Эта формула использует массивное сравнение и позволяет получить точное соответствие даже при наличии символов «*» и «?» в данных.

Краткое резюме

Если значения содержат символы-джокеры и вы хотите точные совпадения:

  • Используйте XLOOKUP в современных версиях Excel — по умолчанию она не включает wildcard-режим.
  • Для VLOOKUP экранируйте «*» и «?» заменой на «~*» и «~?» через SUBSTITUTE, используйте IFNA для обработки ошибок.
  • В старых версиях применяйте INDEX/MATCH (массивные формулы) для точного поиска.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *