Почему XLOOKUP лучше VLOOKUP и как его применять
Функция XLOOKUP появилась в Excel 365 и Excel 2021 как революционная замена устаревшим VLOOKUP и HLOOKUP. Она решает их ключевые проблемы: не требует указания номера столбца, умеет искать данные как слева направо, так и справа налево, и возвращает точные совпадения по умолчанию. Если вы до сих пор используете INDEX+MATCH для гибкого поиска — пришло время перейти на XLOOKUP.
В этой статье разберём синтаксис функции, покажем практические примеры (включая поиск с несколькими критериями и обработку ошибок), сравним с альтернативами и раскроем скрытые возможности XLOOKUP, о которых не пишут в официальной документации Microsoft. Например, как с её помощью делать динамические отчёты или искать данные в несмежных диапазонах.
Даже если вы новичок, после прочтения сможете:
- 🔍 Находить значения в таблицах без привязки к номерам столбцов
- ⚡ Заменять
VLOOKUPиINDEX+MATCHодной функцией - 📊 Создавать динамические сводные таблицы с автоматическим обновлением данных
- ❌ Обрабатывать ошибки (#N/A) прямо внутри формулы
Синтаксис 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 проблем:
- #N/A — значение не найдено.
Решение: проверьте регистр текста (XLOOKUP чувствителен к "Иванов" vs "иванов"), удалите лишние пробелы функцией
TRIM. - #VALUE! — несовпадение размеров массивов.
Решение: используйте
ROWSдля проверки:=IF(ROWS(D2:D100)=ROWS(E2:E100); XLOOKUP(...); "Ошибка диапазонов") - #CALC! — циклическая ссылка.
Решение: проверьте, не ссылается ли формула сама на себя (например, если
массив_выводавключает ячейку с формулой). - #SPILL! — переполнение диапазона.
Решение: освободите ячейки справа/снизу от формулы, если XLOOKUP возвращает несколько значений.
- Неправильный результат при приближённом поиске.
Решение: явно укажите
тип_совпадения=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 способов ускорить работу:
- Используйте двоичный поиск (
режим_поиска=2):Работает только на отсортированных данных, но в 10-100 раз быстрее:
=XLOOKUP(B2; D2:D100; E2:E100; "Не найдено"; 0; 2) - Сужайте диапазоны:
Вместо
D2:D10000используйтеD2:INDEX(D:D; MATCH("zzz"; D:D)), чтобы ограничить диапазон последними заполненными ячейками. - Отключите автоматический пересчёт:
Перейдите в
Формулы → Параметры вычислений → Вручнуюи обновляйте данные поF9. - Заменяйте текстовые критерии на числовые:
Поиск по числовому коду (
1,2) работает быстрее, чем по тексту ("Да", "Нет"). - Избегайте вложенных 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))); "")