XLOOKUP в Excel: полное руководство для поиска данных

Почему XLOOKUP лучше VLOOKUP и как его применять

Функция XLOOKUP появилась в Excel 365 и Excel 2021 как революционная замена устаревшим VLOOKUP и HLOOKUP. Она решает их ключевые проблемы: не требует указания номера столбца, умеет искать данные как слева направо, так и справа налево, и возвращает точные совпадения по умолчанию. Если вы до сих пор используете INDEX+MATCH для гибкого поиска — пришло время перейти на XLOOKUP.

В этой статье разберём синтаксис функции, покажем практические примеры (включая поиск с несколькими критериями и обработку ошибок), сравним с альтернативами и раскроем скрытые возможности XLOOKUP, о которых не пишут в официальной документации Microsoft. Например, как с её помощью делать динамические отчёты или искать данные в несмежных диапазонах.

Даже если вы новичок, после прочтения сможете:

  • 🔍 Находить значения в таблицах без привязки к номерам столбцов
  • ⚡ Заменять VLOOKUP и INDEX+MATCH одной функцией
  • 📊 Создавать динамические сводные таблицы с автоматическим обновлением данных
  • ❌ Обрабатывать ошибки (#N/A) прямо внутри формулы
📊 Какой функцией поиска вы пользовались раньше?
VLOOKUP
HLOOKUP
INDEX+MATCH
XLOOKUP
Никакой

Синтаксис XLOOKUP: разбираем аргументы по порядку

Базовая структура функции:

=XLOOKUP(искомое_значение; просматриваемый_массив; массив_вывода; [если_не_найдено]; [тип_совпадения]; [режим_поиска])

Разберём каждый аргумент на примере поиска цены товара по его артикулу:

Аргумент Описание Пример
искомое_значение Что ищем (артикул, имя, дата и т.д.) B2 (ячейка с артикулом "АРТ-001")
просматриваемый_массив Диапазон, где искать (столбец с артикулами) D2:D100
массив_вывода Диапазон с результатами (столбец с ценами) E2:E100
[если_не_найдено] Что возвращать при ошибке (опционально) "Товар не найден"
[тип_совпадения] 0 — точное, -1 — приближённое (меньшее), 1 — приближённое (большее) 0 (по умолчанию)
[режим_поиска] 1 — поиск с начала (быстрее), -1 — с конца, 2 — двоичный поиск 1

Простейший пример:

=XLOOKUP(B2; D2:D100; E2:E100; "Нет в наличии")
⚠️ Внимание: Если просматриваемый_массив и массив_вывода имеют разное количество строк, Excel вернёт ошибку #VALUE!. Всегда проверяйте соответствие диапазонов.

Практические примеры: от простого к сложному

1. Базовый поиск (замена VLOOKUP)

Допустим, у вас таблица с данными сотрудников, где нужно найти должность по фамилии:

=XLOOKUP("Иванов"; A2:A10; B2:B10)

Эта формула вернёт должность из столбца B для фамилии "Иванов" из столбца A. В отличие от VLOOKUP, не нужно указывать номер столбца с результатом!

2. Поиск слева направо (где искомое значение справа)

Классическая проблема VLOOKUP — он не умеет искать значения слева от результата. XLOOKUP справляется легко:

=XLOOKUP(H2; B2:B10; A2:A10)

Здесь мы ищем фамилию (H2) в столбце B, а возвращаем соответствующий ей идентификатор из столбца A.

3. Поиск с несколькими критериями

Чтобы найти цену товара определенного типа и определенного цвета, комбинируем данные в дополнительном столбце:

=XLOOKUP(B2&C2; D2:D100&E2:E100; F2:F100)

Где:

  • B2 — тип товара (например, "Ноутбук")
  • C2 — цвет (например, "Серебристый")
  • D2:D100&E2:E100 — объединённые столбцы с типом и цветом в таблице данных

Создать вспомогательный столбец с объединёнными критериями|Проверить отсутствие пробелов в данных|Убедиться в одинаковом регистре текста|Протестировать формулу на известных данных-->

4. Динамический поиск с обработкой ошибок

Добавим обработку ошибок и значение по умолчанию:

=XLOOKUP(B2; D2:D100; E2:E100; "Нет в наличии"; 0; 1)

Здесь:

  • "Нет в наличии" — сообщение, если товар не найден
  • 0 — точное совпадение
  • 1 — поиск с начала массива (ускоряет работу)
⚠️ Внимание: Если в просматриваемом_массиве есть дубликаты, XLOOKUP вернёт первое найденное значение. Чтобы получить все совпадения, используйте FILTER (доступно в Excel 365).

XLOOKUP vs VLOOKUP: почему стоит переходить

Сравним ключевые различия в таблице:

Критерий XLOOKUP VLOOKUP
Поиск слева направо ✅ Да ❌ Нет
Точное совпадение по умолчанию ✅ Да ❌ Нет (нужен FALSE)
Обработка ошибок в формуле ✅ Да ([если_не_найдено]) ❌ Нет (нужна IFERROR)
Динамические массивы ✅ Да (возвращает несколько значений) ❌ Нет
Скорость работы ⚡ Быстрее (оптимизированный алгоритм) 🐢 Медленнее на больших данных

Пример, где VLOOKUP требует обходных путей, а XLOOKUP справляется в одну формулу:

=XLOOKUP(1; --(A2:A10="Да"); B2:B10)

Эта формула находит значение в столбце B, соответствующее первой ячейке со значением "Да" в столбце A. Для VLOOKUP пришлось бы добавлять вспомогательный столбец с 1/0.

Распространённые ошибки и как их избежать

Даже опытные пользователи сталкиваются с ошибками при работе с XLOOKUP. Разберём топ-5 проблем:

  1. #N/A — значение не найдено.

    Решение: проверьте регистр текста (XLOOKUP чувствителен к "Иванов" vs "иванов"), удалите лишние пробелы функцией TRIM.

  2. #VALUE! — несовпадение размеров массивов.

    Решение: используйте ROWS для проверки:

    =IF(ROWS(D2:D100)=ROWS(E2:E100); XLOOKUP(...); "Ошибка диапазонов")

  3. #CALC! — циклическая ссылка.

    Решение: проверьте, не ссылается ли формула сама на себя (например, если массив_вывода включает ячейку с формулой).

  4. #SPILL! — переполнение диапазона.

    Решение: освободите ячейки справа/снизу от формулы, если XLOOKUP возвращает несколько значений.

  5. Неправильный результат при приближённом поиске.

    Решение: явно укажите тип_совпадения=0 для точного поиска или отсортируйте данные перед приближённым поиском.

Скрытая ловушка: если искомое_значение — это формула, а не статический текст, Excel может кэшировать результат. Чтобы обновить данные, нажмите F9.

Почему XLOOKUP иногда возвращает #N/A, хотя значение есть?

Это может происходить из-за:

1. Скрытых символов (неразрывные пробелы, символы табуляции) — используйте CLEAN или SUBSTITUTE.

2. Разного формата ячеек (текст vs число) — преобразуйте формат с помощью VALUE или TEXT.

3. Ошибок в данных (например, ячейка выглядит пустой, но содержит формулу, возвращающую "").

Чтобы диагностировать проблему, используйте:

=CODE(LEFT(D2;1))

Эта формула покажет код первого символа в ячейке D2 (например, 160 — неразрывный пробел).

Продвинутые техники: XLOOKUP + другие функции

Сила XLOOKUP раскрывается в комбинации с другими функциями. Вот 3 продвинутых примера:

1. Поиск с подстановочными знаками

Ищем все товары, название которых начинается на "Ноутбук":

=XLOOKUP("Ноутбук*"&""; D2:D100&""; E2:E100)

Здесь мы добавляем "" к каждому элементу массива с помощью D2:D100&"", чтобы включить подстановочные знаки в поиск.

2. Динамический отчёт по нескольким критериям

Создаём таблицу, которая автоматически обновляется при изменении фильтров:

=FILTER(A2:C100; (B2:B100=E2) * (C2:C100=E3); "Нет данных")

Где E2 и E3 — ячейки с критериями фильтрации. Для совместимости со старыми версиями Excel замените FILTER на:

=IFERROR(XLOOKUP(1; (B2:B100=E2)*(C2:C100=E3); A2:C100); "Нет данных")

3. Поиск с возвратом нескольких столбцов

Вернём не только цену товара, но и его вес и категорию:

=XLOOKUP(B2; D2:D100; E2:G100)

Здесь E2:G100 — диапазон с тремя столбцами (цена, вес, категория). Формула вернёт все три значения в соседние ячейки (это называется "проливанием" результата).

=INDEX(XLOOKUP(B2; D2:D100; E2:G100);;1)

Эта формула вернёт только первый столбец из результата (цену).-->

Оптимизация производительности: как ускорить XLOOKUP

На больших данных (10 000+ строк) XLOOKUP может тормозить. Вот 5 способов ускорить работу:

  1. Используйте двоичный поиск (режим_поиска=2):

    Работает только на отсортированных данных, но в 10-100 раз быстрее:

    =XLOOKUP(B2; D2:D100; E2:E100; "Не найдено"; 0; 2)

  2. Сужайте диапазоны:

    Вместо D2:D10000 используйте D2:INDEX(D:D; MATCH("zzz"; D:D)), чтобы ограничить диапазон последними заполненными ячейками.

  3. Отключите автоматический пересчёт:

    Перейдите в Формулы → Параметры вычислений → Вручную и обновляйте данные по F9.

  4. Заменяйте текстовые критерии на числовые:

    Поиск по числовому коду (1, 2) работает быстрее, чем по тексту ("Да", "Нет").

  5. Избегайте вложенных XLOOKUP:

    Если нужно сделать несколько поисков подряд, используйте LET (Excel 365) для кэширования промежуточных результатов.

Тест на 50 000 строк показал, что оптимизированный XLOOKUP работает в 3 раза быстрее INDEX+MATCH и в 10 раз быстрее VLOOKUP.

FAQ: ответы на частые вопросы

Можно ли использовать XLOOKUP в Excel 2019 или более ранних версиях?

Нет, XLOOKUP доступен только в Excel 365 и Excel 2021. Для старых версий используйте комбинацию INDEX+MATCH:

=INDEX(E2:E100; MATCH(B2; D2:D100; 0))

Как сделать поиск по частичному совпадению (например, найти все ячейки, содержащие "Apple")?

Используйте подстановочные знаки (*) в комбинации с функцией SEARCH:

=FILTER(A2:A100; ISNUMBER(SEARCH("Apple"; B2:B100)))

Для XLOOKUP потребуется вспомогательный столбец с формулой =SEARCH("Apple"; B2).

Почему XLOOKUP возвращает #SPILL!, хотя ячейки пустые?

Ошибка #SPILL! возникает, если:

  • В соседних ячейках есть скрытые данные (например, пробелы или формулы, возвращающие "").
  • Лист защищён от изменений.
  • В настройках Excel отключены динамические массивы (Файл → Параметры → Формулы → Разрешить динамические массивы).

Решение: проверьте соседние ячейки на наличие данных и включите динамические массивы.

Можно ли использовать XLOOKUP для поиска в нескольких таблицах?

Да, но потребуется объединить данные. Пример для двух таблиц:

=XLOOKUP(B2; {Таблица1[Артикул]; Таблица2[Артикул]}; {Таблица1[Цена]; Таблица2[Цена]})

Здесь {...} — это оператор объединения массивов. Важно, чтобы в обеих таблицах не было повторяющихся артикулов.

Как вернуть все совпадения, а не только первое?

Используйте FILTER (Excel 365):

=FILTER(E2:E100; D2:D100=B2)

Или для старых версий — формулу массива (вводится через Ctrl+Shift+Enter):

=IFERROR(INDEX($E$2:$E$100; SMALL(IF($D$2:$D$100=$B$2; ROW($D$2:$D$100)-1); ROW(A1))); "")