Функция ПОИСКПОЗ в Excel: назначение, синтаксис и 7 практических примеров

Функция ПОИСКПОЗ в Excel возвращает позицию искомого значения в указанном диапазоне — и это её ключевое отличие от ВПР или ИНДЕКС. Если вы получаете ошибку #Н/Д при попытке найти строку в таблице или нуждаетесь в динамическом определении номера строки/столбца для дальнейших вычислений, проблема чаще всего кроется в трёх параметрах: искомое_значение, просматриваемый_массив и тип_сопоставления. Например, при поиске текстового значения "Иванов" в несортированном списке с параметром тип_сопоставления=1 (точное совпадение) функция вернёт ошибку, хотя данные в таблице есть. Это типичная ошибка новичков, которая решается изменением третьего аргумента на 0.

В отличие от ВПР, которая ищет значение и сразу возвращает данные из другого столбца, ПОИСКПОЗ только определяет индекс позиции (номер строки или столбца) в заданном диапазоне. Эта особенность делает её незаменимой для сложных формул, где требуется гибкость — например, при работе с двумерными массивами или динамическими диапазонами в Excel 365. Однако без понимания нюансов сопоставления (точного/приближённого) и структуры данных функция может выдавать некорректные результаты. Далее разберём, как избежать типичных ошибок и использовать ПОИСКПОЗ для решения реальных задач — от простого поиска до автоматизации отчётов.

1. Синтаксис функции ПОИСКПОЗ: разбор аргументов

Формула функции в Excel записывается так:

=ПОИСКПОЗ(искомое_значение; просматриваемый_массив; [тип_сопоставления])

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

  • 🔍 искомое_значение — значение, позицию которого нужно найти. Это может быть число, текст, ссылка на ячейку или результат другой функции (например, СЕГОДНЯ()). Важно: регистр не учитывается (например, "иванов" и "Иванов" будут восприняты как одинаковые значения).
  • 📊 просматриваемый_массив — диапазон ячеек, в котором выполняется поиск. Может быть одномерным (столбец или строка) или двумерным (таблица). Если массив двумерный, поиск идёт по первой строке или первому столбцу в зависимости от контекста.
  • 🔢 тип_сопоставления (необязательный):
    • 1 — поиск приближённого совпадения (массив должен быть отсортирован по возрастанию).
    • 0 — поиск точного совпадения (рекомендуется для большинства задач).
    • -1 — поиск приближённого совпадения (массив должен быть отсортирован по убыванию).
    • Если аргумент опущен, по умолчанию используется 1.
⚠️ Внимание: При использовании тип_сопоставления=1 или -1 функция возвращает позицию наибольшего значения, не превышающего искомое. Это часто приводит к ошибкам, если массив не отсортирован. Например, в списке {10; 5; 20} поиск числа 15 вернёт позицию 2 (значение 5), а не ошибку.

2. Чем ПОИСКПОЗ отличается от ВПР, ИНДЕКС и ПРОСМОТРХ

Многие пользователи путают ПОИСКПОЗ с другими функциями поиска. Основные различия:

Функция Назначение Возвращаемое значение Ограничения
ПОИСКПОЗ Поиск позиции значения в массиве Номер строки/столбца (индекс) Не работает с несортированными данными при приближённом поиске
ВПР Поиск значения в первом столбце и возвращение данных из указанного столбца Значение из ячейки Медленная на больших массивах, не поддерживает поиск влево
ИНДЕКС Возвращает значение из ячейки по заданным индексам строки и столбца Значение или ссылка Требует точных координат
ПРОСМОТРХ Поиск значения в строке или столбце с возвратом данных из той же позиции в другом диапазоне Значение Менее гибкая, чем ИНДЕКС+ПОИСКПОЗ

Ключевое преимущество ПОИСКПОЗ — возможность комбинирования с ИНДЕКС для создания динамических формул. Например, чтобы найти цену товара по его названию в несортированной таблице, лучше использовать:

=ИНДЕКС(C2:C100; ПОИСКПОЗ("Яблоки"; A2:A100; 0))

Эта комбинация работает быстрее ВПР и поддерживает поиск влево.

📊 Как часто вы используете ПОИСКПОЗ в Excel?
Часто, это моя основная функция поиска
Иногда, когда ВПР не подходит
Раньше не знал(а) о ней
Предпочитаю другие функции

3. Типичные ошибки и как их исправить

Ошибка #Н/Д — самая распространённая проблема при работе с ПОИСКПОЗ. Её причины и решения:

  • 🚫 Искомого значения нет в массиве:
    • Проверьте опечатки (например, лишние пробелы в тексте). Используйте СЖПРОБЕЛЫ для очистки данных.
    • Убедитесь, что регистр не влияет на поиск (функция регистронезависима, но иногда данные содержат скрытые символы).
  • 🔍 Неверный тип сопоставления:
    • Для точного поиска всегда используйте 0. Пример ошибки: =ПОИСКПОЗ(15; A1:A10) вернёт #Н/Д, если в диапазоне нет 15, но есть 10 и 20 (по умолчанию тип_сопоставления=1).
  • 📉 Массив не отсортирован для приближённого поиска:
    • При тип_сопоставления=1 или -1 массив должен быть отсортирован по возрастанию/убыванию. В противном случае результат будет некорректным.
⚠️ Внимание: Если просматриваемый_массив — это двумерный диапазон (например, A1:C10), функция ищет только в первом столбце (для вертикального поиска) или первой строке (для горизонтального). Чтобы искать в другом столбце, используйте ИНДЕКС:

=ПОИСКПОЗ(100; ИНДЕКС(B2:B100; 0); 0)

4. Практическое применение: 7 примеров с формулами

Рассмотрим реальные задачи, где ПОИСКПОЗ эффективнее альтернатив:

  1. Поиск последней непустой ячейки в столбце:
  2. =ПОИСКПОЗ(2; 1/(A:A<>""); 1)

    Формула массива (вводится через Ctrl+Shift+Enter в старых версиях Excel). Возвращает номер последней заполненной строки в столбце A.

  3. Двусторонний поиск (по строке и столбцу):
  4. =ИНДЕКС(C2:E10; ПОИСКПОЗ("Иванов"; A2:A10; 0); ПОИСКПОЗ("Май"; B1:E1; 0))

    Ищет значение на пересечении строки с фамилией "Иванов" и столбца с месяцем "Май".

  5. Поиск с учётом регистра:
  6. =ПОИСКПОЗ(ИСТИНА; ТОЧНОЕ(A2:A10; "Иванов"); 0)

    Формула массива для чувствительного к регистру поиска (требует Excel 365 или Ctrl+Shift+Enter).

Удалите лишние пробелы функцией СЖПРОБЕЛЫ|Проверьте сортировку массива при приближённом поиске|Убедитесь, что искомое значение существует в диапазоне|Используйте 0 для точного сопоставления-->

5. Оптимизация производительности: как ускорить ПОИСКПОЗ

На больших массивах (10 000+ строк) ПОИСКПОЗ может замедлять пересчёт книги. Советы по оптимизации:

  • Используйте именованные диапазоны:
  • Замените A2:A10000 на именованный диапазон (например, СписокТоваров). Это упрощает формулы и ускоряет поиск.

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

  • 📈 Замените на XLOOKUP в Excel 365:
  • Новая функция XLOOKUP работает быстрее и поддерживает поиск в любом направлении:

    =XLOOKUP("Иванов"; A2:A100; C2:C100; "Не найдено"; 0; 1)
Почему ПОИСКПОЗ медленнее ВПР на небольших диапазонах?

Функция ПОИСКПОЗ выполняет бинарный поиск при приближённом сопоставлении (тип_сопоставления=1 или -1), что требует предварительной сортировки данных. ВПР в этом случае использует линейный поиск, который на массивах до 1000 строк может быть быстрее. Однако на больших диапазонах (10 000+ строк) ПОИСКПОЗ с приближённым сопоставлением работает эффективнее за счёт алгоритма бинарного поиска (O(log n) против O(n) у ВПР).

6. Расширенные техники: ПОИСКПОЗ + ДВССЫЛ, ЛЯМБДА и другие функции

Для опытных пользователей ПОИСКПОЗ можно комбинировать с другими функциями для решения сложных задач:

Пример 1. Динамический поиск в нескольких листах

=ПОИСКПОЗ("Яблоки"; ДВССЫЛ("Лист" & ПОИСКПОЗ(МАКС(СЧЁТЕСЛИ(ДВССЫЛ("Лист" & {1;2;3} & "!A:A"); "Яблоки")); СЧЁТЕСЛИ(ДВССЫЛ("Лист" & {1;2;3} & "!A:A"); "Яблоки"); 0)) & "!A:A"; 0)

Эта формула массива ищет значение "Яблоки" на листе, где оно встречается чаще всего.

Пример 2. Поиск с использованием ЛЯМБДА (Excel 365)

=ЛЯМБДА(искомое; массив;

ПОИСКПОЗ(искомое; массив; 0)

)("Иванов"; A2:A100)

Позволяет создавать пользовательские функции на лету.

=ЕСЛИОШИБКА(МАЛЕНЬКИЙ(ЕСЛИ(A2:A100="Иванов"; СТРОКА(A2:A100)-1); СТРОКА(A1)); "")

Формула массива (вводится через Ctrl+Shift+Enter в старых версиях).-->

7. Альтернативы ПОИСКПОЗ в современных версиях Excel

В Excel 365 и Excel 2021 появились более мощные функции, которые могут заменить ПОИСКПОЗ:

  • 🔎 XLOOKUP:
  • Универсальная функция поиска, которая умеет:

    • Искать в любом направлении (влево, вправо, вверх, вниз).
    • Возвращать несколько значений (через #).
    • Обрабатывать ошибки без ЕСЛИОШИБКА.
    =XLOOKUP("Иванов"; A2:A100; C2:C100; "Не найдено"; 0; 1)
  • 📌 XMATCH:
  • Аналог ПОИСКПОЗ, но с расширенными опциями:

    • Поддержка поиска в обратном порядке (mode=-1).
    • Возможность указать режим сопоставления (0 — точное, 1 — приближённое).
    =XMATCH("Иванов"; A2:A100; 0; -1)
⚠️ Внимание: Функции XLOOKUP и XMATCH доступны только в Excel 365 и Excel 2021. В более ранних версиях используйте комбинацию ИНДЕКС+ПОИСКПОЗ или ДВССЫЛ.

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

Почему ПОИСКПОЗ возвращает неверную позицию, хотя значение есть в таблице?

Скорее всего, вы используете тип_сопоставления=1 (приближённый поиск) на несортированном массиве. Решение:

  1. Отсортируйте данные по возрастанию.
  2. Или замените третий аргумент на 0 для точного поиска.
Можно ли с помощью ПОИСКПОЗ найти значение в несортированной таблице?

Да, но только при тип_сопоставления=0 (точный поиск). Пример:

=ПОИСКПОЗ("Иванов"; A2:A100; 0)

Если нужно найти все вхождения, используйте формулу массива с СТРОКА и ЕСЛИОШИБКА (см. раздел 6).

Как вернуть не позицию, а само значение из другой колонки?

Комбинируйте ПОИСКПОЗ с ИНДЕКС:

=ИНДЕКС(C2:C100; ПОИСКПОЗ("Иванов"; A2:A100; 0))

Эта формула найдёт "Иванов" в столбце A и вернёт соответствующее значение из столбца C.

Почему ПОИСКПОЗ не находит текстовое значение, хотя оно есть в ячейке?

Вероятные причины:

  • Лишние пробелы в данных (используйте СЖПРОБЕЛЫ).
  • Скрытые символы (например, неразрывный пробел). Проверьте с помощью =КОДСИМВ(ЛЕВСИМВ(A2)).
  • Разный регистр (хотя функция регистронезависима, иногда влияют локальные настройки).
Можно ли использовать ПОИСКПОЗ для поиска по нескольким критериям?

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

=ПОИСКПОЗ(1; (A2:A100="Иванов")*(B2:B100=ДАТА(2023;5;15)); 0)

Формула массива (в Excel 365 вводится без Ctrl+Shift+Enter).