Когда XLOOKUP() быстрее VLOOKUP() в Excel — сравнение производительности и советы

Введение

Многие Excel‑пользователи ожидают, что новая функция XLOOKUP() будет быстрее устаревшего VLOOKUP(), особенно при массовых подстановках в больших книгах. Однако на практике замена всех VLOOKUP() на XLOOKUP() в одной реальной книге объёмом 6 МБ привела к тому, что время пересчёта выросло с ~2 секунд до ~4,5 секунд.

В статье мы разберём факты, экспериментальные данные и типичные сценарии, в которых XLOOKUP() действительно может превосходить VLOOKUP() по производительности. Сохранены приведённые примеры, числа и ключевые термины (XLOOKUP(), VLOOKUP(), Excel, Microsoft 365, binary search и т.д.).

Проблема и экспериментальные данные

Автор заметил замедление на большой книге (6 МБ) после массовой замены VLOOKUP() на XLOOKUP(). До замены время пересчёта было около 2 секунд, после — примерно 4,5 секунды. Это побудило провести контрольный тест в небольшой тестовой книге.

В тесте столбец B содержал последовательность чисел от 1 до 1 048 576, а столбец C = SQRT(B) (от 1 до чуть более 1000). Искали значение 1 000 000 в столбце B и возвращали соответствующее значение из C (1000). XLOOKUP() показал 0,04–0,05 секунды, а VLOOKUP() — 0,00 секунды в этом конкретном тесте.

При этом в сети встречаются противоречивые утверждения: одни источники утверждают, что XLOOKUP() быстрее, другие — что VLOOKUP() быстрее. Поэтому нужно рассмотреть, в каких ситуациях какая функция имеет преимущество.

Общее мнение: гибкость против простоты и скорости

Общее мнение сводится к тому, что XLOOKUP() более функционален и гибок, но не всегда быстрее. VLOOKUP() имеет меньше опций и по умолчанию использует приблизительное соответствие (approximate match), что может ускорять поиск, но снижает точность и гибкость.

XLOOKUP() по умолчанию использует точное соответствие (exact match), что обычно более правильный выбор, и предоставляет дополнительные опции для настройки поведения. Таким образом выбор между XLOOKUP() и VLOOKUP() — это компромисс между скоростью в простых сценариях и функциональностью при более сложных требованиях.

Когда XLOOKUP() быстрее VLOOKUP()

1. Обратные (right‑to‑left) и большие наборы данных

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

Для больших таблиц с множеством отдельных обращений к одной и той же паре столбцов XLOOKUP() может работать быстрее благодаря тому, что он оперирует только с нужными столбцами вместо всей таблицы.

2. Поиск по одному столбцу (single‑column matching)

XLOOKUP() загружает в память только столбец поиска и столбец возврата, тогда как VLOOKUP() обрабатывает весь указанный диапазон таблицы. Это особенно заметно, когда таблица имеет много столбцов, но нужно вернуть значение только из одного.

Пример (большой набор данных):

=XLOOKUP("Order123", Orders[ID], Orders[Amount])  'Обрабатывает только два столбца
=VLOOKUP("Order123", Orders, 5, FALSE)            'Обрабатывает все столбцы диапазона Orders

3. Бинарный поиск (binary search) для сортированных данных

XLOOKUP() поддерживает режим бинарного поиска (search_mode=2 или -2) при условии, что данные заранее отсортированы. Бинарный поиск делит диапазон пополам и выполняет логарифмическое число сравнений, что значительно быстрее линейного поиска.

XLOOKUP() в режиме бинарного поиска может работать более чем вдвое быстрее по сравнению с обычным режимом XLOOKUP(). Для отсортированных данных это делает XLOOKUP() быстрее, чем VLOOKUP() в большинстве случаев.

4. Динамические массивы и избежание повторных вычислений

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

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

Ключевые замечания и вывод

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

Однако VLOOKUP() остаётся в ряде простых сценариев быстрее из‑за меньшего количества опций и использования по умолчанию приблизительного соответствия. Поэтому выбор между XLOOKUP() и VLOOKUP() следует делать, учитывая не только скорость, но и точность, гибкость и структуру данных. Используется Microsoft 365 в оригинальном примере, где доступны все возможности XLOOKUP().

Источники

Релевантные материалы и тесты были приведены в исходных источниках:

Performance of XLOOKUP: How fast is the new XLOOKUP vs. VLOOKUP?

https://trumpexcel.com/excel-functions/vlookup-vs-xlookup/

Ответить

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