Excel поискпоз повторяющиеся значения

Skip to content

ИНДЕКС ПОИСКПОЗ как лучшая альтернатива ВПР

В этом руководстве показано, как использовать ИНДЕКС и ПОИСКПОЗ в Excel и чем они лучше ВПР.

В нескольких недавних статьях мы приложили немало усилий, чтобы объяснить основы функции ВПР новичкам и предоставить более сложные примеры формул ВПР опытным пользователям. А теперь я постараюсь если не отговорить вас от использования ВПР, то хотя бы показать вам альтернативный способ поиска нужных значений в Excel.

  • Краткий обзор функций ИНДЕКС и ПОИСКПОЗ
  • Как использовать формулу ИНДЕКС ПОИСКПОЗ
  • ИНДЕКС+ПОИСКПОЗ вместо ВПР?
  • Поиск справа налево
  • Двусторонний поиск в строках и столбцах
  • ИНДЕКС ПОИСКПОЗ для поиска по нескольким условиям
  • Как найти среднее, максимальное и минимальное значение
  • Что делать с ошибками поиска?

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

Функции Excel ИНДЕКС и ПОИСКПОЗ — основы

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

Функция ИНДЕКС

Функция ИНДЕКС (в английском варианте – INDEX) возвращает значение в массиве на основе указанных вами номеров строк и столбцов. Синтаксис функции ИНДЕКС прост:

ИНДЕКС(массив,номер_строки,[номер_столбца])

Вот простое объяснение каждого параметра:

  • массив — это диапазон ячеек, именованный диапазон или таблица.
  • номер_строки — это номер строки в массиве, из которого нужно вернуть значение. Если этот аргумент опущен, требуется следующий – номер_столбца.
  • номер_столбца — это номер столбца, из которого нужно вернуть значение. Если он опущен, требуется номер_строки.

Дополнительные сведения см. в статье Функция ИНДЕКС в Excel .

А вот пример формулы ИНДЕКС в самом простом виде:

=ИНДЕКС(A1:C10;2;3)

Формула выполняет поиск в ячейках с A1 по C10 и возвращает значение ячейки во 2-й строке и 3-м столбце, т. е. в ячейке C2.

Очень легко, правда? Однако при работе с реальными данными вы вряд ли когда-нибудь будете заранее знать, какие строки и столбцы вам нужны. Здесь вам пригодится ПОИСКПОЗ.

Функция ПОИСКПОЗ

Она ищет нужное значение в диапазоне ячеек и возвращает относительное положение этого значения в диапазоне.

Синтаксис функции ПОИСКПОЗ следующий:

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

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

Например, если диапазон B1:B3 содержит значения «яблоки», «апельсины», «лимоны», приведенная ниже формула возвращает число 3, поскольку «лимоны» — это третья по счету запись в этом диапазоне:

=ПОИСКПОЗ(«лимоны»;B1:B3;0)

Дополнительные сведения см . в статье Функция ПОИСКПОЗ в Excel .

На первый взгляд полезность функции ПОИСКПОЗ может показаться сомнительной. Кого волнует положение значения в диапазоне? Что мы действительно хотим определить, так это само значение.

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

Вот поэтому совместное использование ИНДЕКС и ПОИСКПОЗ открывает перед нами массу возможностей для поиска в Excel.

Как использовать формулу ИНДЕКС ПОИСКПОЗ в Excel

Теперь, когда вы знаете основы, я считаю, что вы уже начали понимать, как ПОИСКПОЗ и ИНДЕКС работают вместе. Короче говоря, ИНДЕКС извлекает нужное значение по номерам столбцов и строк, а ПОИСКПОЗ предоставляет ей эти номера. Вот и все!

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

ИНДЕКС ( столбец для возврата значения ; ПОИСКПОЗ ( искомое значение ; столбец для поиска ; 0))

Все еще не совсем понимаете эту логику? Возможно, будет проще разобрать на примере. Предположим, у вас есть список национальных столиц и их население:

Чтобы найти население определенной столицы, скажем, Индии, используйте следующую формулу ПОИСКПОЗ ИНДЕКС:

=ИНДЕКС(C2:C10; ПОИСКПОЗ(“Индия”;A2:A10;0))

Теперь давайте проанализируем, что на самом деле делает каждый компонент этой формулы:

  • Функция ПОИСКПОЗ ищет искомое значение «Индия» в диапазоне A2:A10 и возвращает число 2, поскольку это слово занимает второе место в массиве поиска.
  • Этот номер поступает непосредственно в аргумент номер_строки функции ИНДЕКС, предписывая вернуть значение из этой строки.

Таким образом, приведенная выше формула превращается в ИНДЕКС(C2:C10;2), которая означает, что нужно искать в ячейках от C2 до C10 и извлекать значение из второй ячейки в этом диапазоне, то есть из C3, потому что мы начинаем отсчет со второй строки.

Но указывать название города в формуле не совсем правильно, так как для каждого нового поиска придется корректировать эту формулу. Введите его в какую-нибудь отдельную ячейку, скажем, F1, укажите ссылку на ячейку для ПОИСКПОЗ, и вы получите формулу динамического поиска:

=ИНДЕКС(C2:C10;ПОИСКПОЗ(F1;A2:A10;0))

Важное замечаниеКоличество строк в аргументе массив функции ИНДЕКС должно совпадать с количеством строк в аргументе просматриваемый_массив в ПОИСКПОЗ, иначе формула выдаст неверный результат.

Вы спросите: «А почему бы нам просто не использовать обычную формулу ВПР? Какой смысл тратить время на то, чтобы разобраться в хитросплетениях ИНДЕКС ПОИСКПОЗ в Excel?»

Вот как это будет выглядеть:

=ВПР(F1; A2:C10; 3; 0)

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

ИНДЕКС+ПОИСКПОЗ вместо ВПР?

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

Ниже я укажу на ключевые преимущества ИНДЕКС ПОИСКПОЗ перед ВПР, а уж вам решать, является ли это достойным дополнением к вашему арсеналу знаний в Excel.

4 основные причины использовать ИНДЕКС ПОИСКПОЗ вместо ВПР

  1. Поиск справа налево. Как известно любому образованному пользователю, ВПР не может искать влево. Это означает, что искомое значение всегда должно находиться в крайнем левом столбце таблицы. А извлекать нужное значение мы будем из столбца, который находится правее. ИНДЕКС+ПОИСКПОЗ может легко выполнять поиск влево! Здесь это показано в действии: Как выполнить поиск значения слева в Excel .
  2. Можно безопасно вставлять или удалять столбцы. Формулы ВПР не работают или выдают неверные результаты, когда новый столбец удаляется из таблицы поиска или добавляется в нее, поскольку синтаксис ВПР требует указания порядкового номера столбца, из которого вы хотите извлечь данные. Естественно, когда вы добавляете или удаляете столбцы, этот номер в формуле автоматически не меняется, а нужный столбец уже оказывается на новом месте.

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

  1. Нет ограничений на размер искомого значения. При использовании функции ВПР общая длина ваших критериев поиска не может превышать 255 символов, иначе вы получите ошибку #ЗНАЧ!. Таким образом, если ваш набор данных содержит длинные строки, ИНДЕКС ПОИСКПОЗ — единственное работающее решение.
  2. Более высокая скорость обработки. Если ваши таблицы относительно небольшие, вряд ли будет какая-то существенная разница в производительности Excel. Но если ваши рабочие листы содержат сотни или тысячи строк и, следовательно, сотни или тысячи формул, ИНДЕКС ПОИСКПОЗ будет работать намного быстрее, чем ВПР. Причина в том, что Excel будет обрабатывать только столбцы поиска и возврата, а не весь массив таблицы.

Влияние ВПР на производительность Excel может быть особенно заметным, если ваша книга содержит сложные формулы массива. Чем больше значений содержит ваш массив и чем больше формул массива содержится в книге, тем медленнее работает Excel.

ИНДЕКС ПОИСКПОЗ в Excel – примеры формул

Уяснив, почему все же стоит изучать ИНДЕКС ПОИСКПОЗ, давайте перейдем к самому интересному и посмотрим, как можно применить теоретические знания на практике.

Формула для поиска справа налево

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

Для этого примера мы добавим столбец «Ранг» слева от нашей основной таблицы и попытаемся выяснить, какое место занимает столица России по численности населения среди других перечисленных  столиц.

Записав искомое значение в G1, используйте следующую формулу для поиска в C2:C10 и возврата соответствующего значения из A2:A10:

=ИНДЕКС(A2:A10; ПОИСКПОЗ(G1;C2:C10;0))

СоветЕсли вы планируете использовать формулу ПОИСКПОЗ ИНДЕКС более чем для одной ячейки, обязательно зафиксируйте оба диапазона абсолютными ссылками  (например, $A$2:$A$10 и $C$2:$C$10), чтобы они не изменялись при копировании формулы.

Двусторонний поиск в строках и столбцах

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

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

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

ИНДЕКС(массив; ПОИСКПОЗ(значение_поиска1 ; столбец_поиска ; 0); ПОИСКПОЗ(значение_поиска2 ; столбец_поиска ; 0))

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

С целевой страной в G1 (значение_поиска1) и целевым годом в G2 (значение_поиска2) формула принимает следующий вид:

=ИНДЕКС(B2:D11; ПОИСКПОЗ(G1;A2:A11;0); ПОИСКПОЗ(G2;B1:D1;0))

Как работает эта формула?

Всякий раз, когда вам нужно понять сложную формулу Excel, разделите ее на более мелкие части и посмотрите, что делает каждая отдельная функция:

ПОИСКПОЗ(G1;A2:A11;0); – ищет в A2:A11 значение из ячейки G1 («США») и возвращает его позицию, которая равна 3.

ПОИСКПОЗ(G2;B1:D1;0) – просматривает диапазон B1:D1, чтобы получить позицию значения из ячейки G2 («2015»), которая равна 3.

Найденные выше номера строк и столбцов становятся соответствующими аргументами функции ИНДЕКС:

ИНДЕКС(B2:D11, 3, 3)

В результате вы получите значение на пересечении 3-й строки и 3-го столбца в диапазоне B2:D11, то есть из D4. Несложно? 

ИНДЕКС ПОИСКПОЗ для поиска по нескольким условиям

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

Вот общая формула ИНДЕКС ПОИСКПОЗ с несколькими критериями:

{=ИНДЕКС( диапазон_возврата; ПОИСКПОЗ (1; ( критерий1 = диапазон1 ) * ( критерий2 = диапазон2 ); 0))}

Примечание. Это формула массива , которую необходимо вводить с помощью сочетания клавиш Ctrl + Shift + Enter.

Предположим, что в таблице ниже вы хотите найти значение на основе двух критериев: Покупатель и Товар.

Следующая формула ИНДЕКС ПОИСКПОЗ отлично работает:

=ИНДЕКС(C2:C10; ПОИСКПОЗ(1; (F1=A2:A10) * (F2=B2:B10); 0))

Где C2:C10 — это диапазон, из которого возвращается значение, F1 — это критерий1, A2:A10 — это диапазон для сравнения с критерием 1, F2 — это критерий 2, а B2:B10 — это диапазон для сравнения с критерием 2.

Не забудьте правильно ввести формулу, нажав Ctrl + Shift + Enter, и Excel автоматически заключит ее в фигурные скобки, как показано на скриншоте ниже:

Рис5

Если вы не хотите использовать формулы массива, добавьте в формулу в F4 еще одну функцию ИНДЕКС и завершите ее ввод обычным нажатием Enter:

=ИНДЕКС(C2:C10; ПОИСКПОЗ(1; ИНДЕКС((F1=A2:A10) * (F2=B2:B10); 0; 1); 0))

Разберем пошагово, как это работает.

Здесь используется тот же подход, что и в обычном сочетании ИНДЕКС ПОИСКПОЗ, где просматривается один столбец. Чтобы оценить несколько критериев, вы создаете два или более массива значений ИСТИНА и ЛОЖЬ, которые представляют совпадения и несовпадения для каждого отдельного критерия, а затем перемножаете соответствующие элементы этих массивов. Операция умножения преобразует ИСТИНА и ЛОЖЬ в 1 и 0 соответственно и создает массив, в котором единицы соответствуют строкам, которые удовлетворяют всем условиям. Функция ПОИСКПОЗ со значением поиска 1 находит первую «1» в массиве и передает ее позицию в ИНДЕКС, которая возвращает значение в этой позиции из указанного столбца.

Вторая формула без массива основана на способности функции ИНДЕКС работать с массивами. Второй вложенный ИНДЕКС имеет 0 в номер_строки , так что он будет передавать весь массив столбцов в ПОИСКПОЗ.

Среднее, максимальное и минимальное значение при помощи ИНДЕКС ПОИСКПОЗ

Microsoft Excel имеет специальные функции для поиска минимального, максимального и среднего значения в диапазоне. Но что, если вам нужно получить значение из другой ячейки, связанной с этими значениями? Например,  получить название города с максимальным населением или узнать товар с минимальными продажами? В этом случае используйте функцию МАКС , МИН или СРЗНАЧ вместе с ИНДЕКС ПОИСКПОЗ.

Максимальное значение.

Предположим, нам нужно в списке городов найти столицу с самым большим населением. Чтобы найти наибольшее значение в столбце С и вернуть соответствующее ему значение из столбца В, находящееся в той же строке, используйте эту формулу:

=ИНДЕКС(B2:B10; ПОИСКПОЗ(МАКС(C2:C10); C2:C10; 0))

Скриншот с примером находится чуть ниже.

Минимальное значение

Теперь найдём город с самым маленьким населением в списке. Чтобы найти наименьшее число в столбце С и получить соответствующее ему значение из столбца В:

=ИНДЕКС(B2:B10; ПОИСКПОЗ(МИН(C2:C10); C2:C10; 0))

Ближайшее к среднему

Теперь мы находим город, население которого наиболее близко к среднему значению. Чтобы вычислить позицию, наиболее близкую к среднему значению показателя, рассчитанному из D2:D10, и получить соответствующее значение из столбца C, используйте следующую формулу:

=ИНДЕКС(B2:B10; ПОИСКПОЗ(СРЗНАЧ(C2:C10); C2:C10; -1 ))

В зависимости от того, как организованы ваши данные, укажите 1 или -1 для третьего аргумента (тип_совпадения) функции ПОИСКПОЗ:

  • Если ваш столбец поиска (столбец D в нашем случае) отсортирован по возрастанию , поставьте 1. Формула вычислит наибольшее значение, которое меньше или равно среднему значению.
  • Если ваш столбец поиска отсортирован по убыванию , введите -1. Формула вычислит наименьшее значение, которое больше или равно среднему значению.
  • Если ваш массив поиска содержит значение , точно равное среднему, вы можете ввести 0 для точного совпадения. Никакой сортировки не требуется.

В нашем примере данные в столбце D отсортированы в порядке убывания, поэтому мы используем -1 для типа соответствия. В результате мы получаем «Токио», так как его население (13 189 000) является ближайшим, превышающим среднее значение (12 269 006).

Что делать с ошибками поиска?

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

=ЕСНД(ИНДЕКС(C2:C10; ПОИСКПОЗ(F1;A2:A10;0)); «Не найдено»)

И теперь, если кто-то вводит значение, которое не существует в диапазоне поиска, формула явно сообщит пользователю, что совпадений не найдено:

Если вы хотите перехватывать все ошибки, а не только #Н/Д, используйте функцию ЕСЛИОШИБКА вместо ЕСНД:

=ЕСЛИОШИБКА(ИНДЕКС(C2:C10; ПОИСКПОЗ(F1;A2:A10;0)); «Что-то пошло не так!»)

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

Итак, еще раз об основных преимуществах формулы ИНДЕКС ПОИСКПОЗ.

  • Возможен ли «левый» поиск?

  • Повлияет ли на результат вставка и удаление столбцов?

    Вы можете вставлять и удалять столько столбцов, сколько хотите. На результат ИНДЕКС ПОИСКПОЗ это не повлияет.

  • Возможен ли поиск по строкам и столбцам?

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

  • Как сделать поиск ИНДЕКС ПОИСКПОЗ по нескольким условиям?

    Можно выполнять поиск по двум или более условиям без добавления дополнительных столбцов. Вот формула массива, которая решит проблему:
    {=ИНДЕКС( диапазон_возврата; ПОИСКПОЗ (1; ( критерий1 = диапазон1 ) * ( критерий2 = диапазон2 ); 0))}

Вот как можно использовать ИНДЕКС и ПОИСКПОЗ в Excel. Я надеюсь, что наши примеры формул окажутся полезными для вас.

Вот еще несколько статей по этой теме:

Здравствуйте.
2003
sub no

Столбец «А» имеет повторяющиеся записи
14
9
64
9
14

Необходимо найти все «9»
=ПОИСКПОЗ(9;$A$1:$A$20;0) =2
Находит первую девятку.
Как найти вторую (4) и n-ую


Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053


Еще 5 вариантов
формулы массива

=ЕСЛИ(СЧЁТЕСЛИ(A$1:A$20;D$1)<СТРОКА()-4;"";НАИМЕНЬШИЙ(ЕСЛИ(A$1:A$20=D$1;СТРОКА(A$1:A$20));СТРОКА()-4))

=НАИМЕНЬШИЙ(ЕСЛИ(A$1:A$20=D$1;СТРОКА(A$1:A$20));СТРОКА()-4)

=НАИМЕНЬШИЙ(ЕСЛИ(A$1:A$20=D$1;СТРОКА(A$1:A$20);999999);СТРОКА()-4)
обычные формулы

=ПОИСКПОЗ(D$1;ДВССЫЛ("A"&СУММ(E4;1)&":A20");)+E4

=ПОИСКПОЗ(D$1;СМЕЩ(A$1;СУММ(E4;1)-1;;СЧЁТ(A:A));)+E4
2, 4 и 5 лишнее убрано условным форматированием, 3 — форматом ячейки

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Михаил, Александр,
Благодарю.
Даже представить не мог что здесь столько (!) решений.
Само-собой  _Boroda_ получил по репе
(похоже что на этом сайте с этим жаргоном не знакомы, но он знает о чем разговор)

P.S.
Своей фантазии хватило на 4-ую формулу. Но, по незнанию, использовал 2 амперсанда
=ПОИСКПОЗ(D$1;ДВССЫЛ(«A»&СУММ(E4;1)&»:»&A20); )+E4
Естественно, машина высказалась недружелюбно


Функция ПОИСКПОЗ

Совет: Попробуйте использовать новую функцию XMATCH , улучшенную версию функции MATCH, которая работает в любом направлении и по умолчанию возвращает точные совпадения, что упрощает и удобнее в использовании, чем предшественницу.

Функция ПОИСКПОЗ выполняет поиск указанного элемента в диапазоне ячеек и возвращает относительную позицию этого элемента в диапазоне. Например, если диапазон A1:A3 содержит значения 5, 25 и 38, то формула =ПОИСКПОЗ(25;A1:A3;0) возвращает значение 2, поскольку элемент 25 является вторым в диапазоне.

Браузер не поддерживает видео.

Совет: Функцией ПОИСКПОЗ следует пользоваться вместо одной из функций ПРОСМОТР, когда требуется найти позицию элемента в диапазоне, а не сам элемент. Например, функцию ПОИСКПОЗ можно использовать для передачи значения аргумента номер_строки функции ИНДЕКС.

Синтаксис

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

Аргументы функции ПОИСКПОЗ описаны ниже.

  • Искомое_значение.    Обязательный аргумент. Значение, которое сопоставляется со значениями в аргументе просматриваемый_массив. Например, при поиске номера в телефонной книге имя абонента указывается в качестве искомого значения, а нужным значением будет номер телефона.

    Аргумент искомое_значение может быть значением (числом, текстом или логическим значением) или ссылкой на ячейку, содержащую такое значение.

  • Просматриваемый_массив    Обязательный аргумент. Диапазон ячеек, в которых производится поиск.

  • Тип_сопоставления.    Необязательный аргумент. Число -1, 0 или 1. Аргумент тип_сопоставления указывает, каким образом в Microsoft Excel искомое_значение сопоставляется со значениями в аргументе просматриваемый_массив. По умолчанию в качестве этого аргумента используется значение 1.

    В приведенной ниже таблице описано, как функция находит значения в зависимости от аргумента тип_сопоставления.

Тип_сопоставления

Поведение

1 или опущен

Функция ПОИСКПОЗ находит наибольшее значение, которое меньше или равно значению аргумента искомое_значение. Просматриваемый_массив должен быть упорядочен по возрастанию: …, -2, -1, 0, 1, 2, …, A-Z, ЛОЖЬ, ИСТИНА.

0

Функция ПОИСКПОЗ находит первое значение, равное аргументу искомое_значение. Просматриваемый_массив может быть не упорядочен.

-1

Функция ПОИСКПОЗ находит наименьшее значение, которое больше или равно значению аргумента искомое_значение. Просматриваемый_массив должен быть упорядочен по убыванию: ИСТИНА, ЛОЖЬ, Z — A, …, 2, 1, 0, -1, -2, … и т. д.

  • Функция ПОИСКПОЗ возвращает не само значение, а его позицию в аргументе просматриваемый_массив. Например, функция ПОИСКПОЗ(«б»;{«а»;»б»;»в«};0) возвращает 2 — относительную позицию буквы «б» в массиве {«а»;»б»;»в»}.

  • Функция ПОИСКПОЗ не различает регистры при сопоставлении текста.

  • Если функция ПОИСКПОЗ не находит соответствующего значения, возвращается значение ошибки #Н/Д.

  • Если тип_сопоставления равен 0 и искомое_значение является текстом, то искомое_значение может содержать подстановочные знаки: звездочку (*) и вопросительный знак (?). Звездочка соответствует любой последовательности знаков, вопросительный знак — любому одиночному знаку. Если нужно найти сам вопросительный знак или звездочку, перед ними следует ввести знак тильды (~).

Пример

Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.

Продукт

Количество

Бананы

25

Апельсины

38

Яблоки

40

Груши

41

Формула

Описание

Результат

=ПОИСКПОЗ(39;B2:B5,1;0)

Так как точного соответствия нет, возвращается позиция ближайшего меньшего элемента (38) в диапазоне B2:B5.

2

=ПОИСКПОЗ(41;B2:B5;0)

Позиция значения 41 в диапазоне B2:B5

4

=ПОИСКПОЗ(40;B2:B5;-1)

Возвращает сообщение об ошибке, так как диапазон B2:B5 упорядочен не по убыванию.

#Н/Д

Нужна дополнительная помощь?

 

Добрый день!  

  Как подтянуть к повторяющимся данным разные данные? Функции ПОИСКПОЗ, ВПР и т.п. ищут только первое совпадение.  

  На Вашем Форуме много сообщений на эту тему, но они касаются поиска дубликатов. А как подтянуть нужные данные с помощью формулы….  
Ищем решение уже давно, пока не получается :-(

 
 

Микки

Пользователь

Сообщений: 3280
Регистрация: 24.12.2012

Была такая тема недавно пишу формулу по аналогии =ИНДЕКС($A:$A;НАИМЕНЬШИЙ(ЕСЛИ(($B$3:$B$8)=F4;СТРОКА($A$3:$A$8);СТРОКА($A$10));СТРОКА()-СТРОКА($A$2))) но торможу с этими строками опять    
Виктор , Саша посмотрите  что не так?

 

{quote}{login=}{date=01.10.2009 04:11}{thema=}{post}Может здесь?  

http://www.planetaexcel.ru/tip.php?aid=62

{/post}{/quote}  
Сделал по аналогии

 

Микки

Пользователь

Сообщений: 3280
Регистрация: 24.12.2012

{quote}{login=}{date=01.10.2009 04:20}{thema=Re: }{post}{quote}{login=}{date=01.10.2009 04:11}{thema=}{post}Может здесь?  

http://www.planetaexcel.ru/tip.php?aid=62

{/post}{/quote}  
Сделал по аналогии{/post}{/quote}  
А если 3 или 4 одинаковых значения будут? Если наворотим штук 5 ?

 

{quote}{login=Микки}{date=01.10.2009 04:18}{thema=}{post}А если 3 или 4 одинаковых значения будут? Если наворотим штук 5 ?{/post}{/quote}  
Было бы желание, а побороть и это можно. Не все же за кого-то решать?!

 

Спасибо огромное! Просто неоценимая помощь!  
Всё работает!  
Действительно, мы и сами сможем решить задачку с повторяющимися значениями 2,3 и более раз, главное — направление на пусть истинный! :)

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

В порядке бреда:  
=ИНДЕКС($A$3:$A$8;ПОИСКПОЗ(НАИБОЛЬШИЙ($B$3:$B$8-СТРОКА($B$3:$B$8)/987,654;E3);$B$3:$B$8-СТРОКА($B$3:$B$8)/987,654;0))  
«времени нет, написал первое, что пришло в голову»

 

Так вот…  
Микки, в целом попытка правильная, но там вообще не нужно указывать значение лжи, т к значений одинаковое количество. Если формулы заносятся в эм…таблицу сортировки «с запасом», то можно, конечно. Ошибка у тебя с агрументом k функции наименьший. Т к k должно быть отличным от единицы только в случае повтора значения текущей строки. Использовать можно, к примеру, счётесли.  
А вообще, советую смотреть этапы вычисления, что является незаменимой вещью в случая самообразования.    
Т е должно выглядеть, если хочется решать через наименьший, примерно так:  
I3=ИНДЕКС(A:A;НАИМЕНЬШИЙ(ЕСЛИ($B$3:$B$8=F3;СТРОКА($B$3:$B$8));СЧЁТЕСЛИ($F$3:F3;F3)))  
Обрати внимание, что у счётесли закреплёно только начало диапазона, т е он увеличивается при растягивании.  
Тут можно или наибольший или наименьший использовать, в зависимости от того, в каком порядке хотелось бы выводить повторяющееся значения. Если «с запасом», то в случае использования функции наибольший() ссылаться нужно на «левую ячейку» выше таблицы и наоборот.

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Для Микки. Дополню предыдущего оратора :)  
ЕСЛИ(($B$3:$B$8)=F3;СТРОКА($A$3:$A$8);СТРОКА($A$10)) — масив из десяток  (СТРОКА($A$10) и номеров строк, где встречается значение F3.  
НАИМЕНЬШИЙ(ЕСЛИ(…);СТРОКА()-СТРОКА($A$2)) — значение предыдущего массива, зависящее от № строки с формулой, № первой встретившейся строки с нужным значением.  
ИНДЕКС($A:$A;номер_найденной_строки)  
Для первой строки как будто работает. Во второй строке результат — ноль. Почему?  
ЕСЛИ дает массив {10;10;10;6;10;10}  
НАИМЕНЬШИЙ ищет ВТОРОЕ (строка-то вторая) меньшее значение массива — а это 10.  
ИНДЕКС, естественно, показывает значение из А10.  
Вывод: ошибка в коэффициенте функции ИНДЕКС, он должен быть неизменным — единица.  
Как определять повторные, Саша рассказал.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Упрощенное решение.  
Доп. столбец:  
=СЧЁТЕСЛИ($C$3:C3;C3)&»_»&C3  
Определяем имя:  
=ВПР(СЧЁТЕСЛИ($G$3:G3;G3)&»_»&G3;$A$3:$B$8;2;0)

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

vikttur, блин, надо бы время «выделить» чтобы себе мозг вынести недавно упомянутыми макро функциями excel 4 и kl с zvi попросить мастер класс провести по трёхмерным массивам, а так же расспросить про хитрости при использовании трансп(). Может поднимем тему? А то уже давненько ничего «принципиально» нового не узнавал :(  
Пытался тут вчера бессонной ночью решить задачу с первой страницы форума, связанную с поиском повторяющихся значений в другом файле, через вышеупомянутый массив чтобы не было нужно открывать все файлы для пересчёта. Приемлемого результата так и не добился :(

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Мозг не трогать! Еще пригодится :)  
А новое проскакивает. Недавно KL показал применение СУММ(СЧЕТЕСЛИ_с_массивом). Не знал. Запрет добавления строк с помощью формул массива (@Nik)- нестандартно.  
Раньше Raptor заходил. Жаль, давно не появлялся, красивые решения у него получались. С ТРАНСП() тоже были примеры.  
А тему можно поднимать, модераторы не накажут :)

 

Микки

Пользователь

Сообщений: 3280
Регистрация: 24.12.2012

Виктор Саша спасибо огромное , я в Вас верил, что есть более элегантный способ без доп стольца.  
P/S Саша зря Вы считаете что я не смотрю Вычисление формулы, любимое занятие, но не все понимаю.

 

@Nik

Пользователь

Сообщений: 138
Регистрация: 01.01.1970

{quote}{login=Саша}{date=02.10.2009 01:39}{thema=}{post}vikttur Пытался тут вчера бессонной ночью решить задачу с первой страницы форума, связанную с поиском повторяющихся значений в другом файле, через вышеупомянутый массив чтобы не было нужно открывать все файлы для пересчёта.{/post}{/quote}  
Ну попробуй сооруди небольшой файл-пример…. подумаем тут все вместе ;-)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Да не я пытался, а Саша :)

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

@Nik, у меня знаний по эм..»обработке массивов» мало, вопросов куча. И терминология хромает.    
К примеру, есть ли возможность сократить массив, оставив только определённые значения?  
Т е есть массив {ложь;1;»вася»;2;истина}  
Есть ли возможность из этого массива создать массив {1;»вася»;2} или {1;2}?  

  Или, скажем, есть исходные данные:  
x  
1  
2  
3  
y  
4  
5  
6  
z  
7  
8  
9  

  Как получить массивы следующего вида?  
x  
1x  
2x  
3x  
y  
4y  
5y  
6y  
z  
7z  
8z  
9z  
—  
x y z  
1 4 7  
2 5 8  
3 6 9  
—  
x 1 2 3  
y 4 5 6  
z 7 8 9  
—  
1 4 7  
2 5 8  
3 6 9  

  Это только примеры вопросов, их на самом деле гора…    
Последний вопрос дублирую в прикреплённом файле.

 

@Nik

Пользователь

Сообщений: 138
Регистрация: 01.01.1970

Если вы имели в виду сделать всё это сугубо формулами, то будет как-то так (см. влож.)  
Напомню, что для того, чтобы не копировать форматы ячеек при распространении, достаточно выделить область, на которую треб. распространить формулу и нажать Ctrl+Enter  
Но я так и не увидел примера с поиском дубликатов в другом файле, который вызвал у вас сложности…

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

Результат должен быть в виде массива, с которым потом уже можно будет работать, т е возвращаться данные массивы(одно- или двумерные) должны одной формулой.  
Собственно, на этом этапе у меня и возникли проблемы при решении той задачи.  

  Если формула возвращает несколько значений, эксель, грубо говоря, возвращает первое значение массива. Если же вводить данную формулу в область, как формулу массива, то он возвращает значения в виде массива по порядку(см. приложение). Таблички я сделал «вручную» просто для наглядности по аналогии с введением формулы, как формулы массива. Вручную вводил, т к не знаю, как ввести это формулой и, собственно, в этом и заключается вопрос.

 

Такие варианты. Формулы медленные, т.ч. написаны исключительно из спортивного интереса :-)

 

Пока писал, вижу постановка задачи изменилась :-)  

  На всякий случай поясняю, почему мои формулы сложнее, чем предложенные @Nik — я исходил из того, что столбцы/строки могут быть неодинаковой длинны.

 

Кстати, если совместимость с нерусской локализацией важна, то для поиска последней текстовой строки в массиве рекомендую использовать:  

  =ПОИСКПОЗ(«*»,A1:A100,-1)  

  а не  

  =ПОИСКПОЗ(«яяяяя»,A1:A100)

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

Я видимо в первичной постановке вопросов неправильно объяснил :(

 

@Nik

Пользователь

Сообщений: 138
Регистрация: 01.01.1970

Саша, а ты пробовал вводить мои формулы как массив для всего ранга ? :-) Из 4х вариантов решения только первый не адаптирован для такого ввода, остальные дают как раз то, что ты хочешь :-) Адаптировать первый вариант под твоё условие можно заменой всех вхождений ссылки на ячейку «А5» на такой формат ссылки: ИНДЕКС($A$5:$A$16;СТРОКА()-СТРОКА($A$4))  
Окончательная формула в яч. [E5] будет такой:
=ЕСЛИ(ЕЧИСЛО(ИНДЕКС($A$5:$A$16;СТРОКА()-СТРОКА($A$4)));ИНДЕКС($A$5:$A$16;СТРОКА()-СТРОКА($A$4));»»)&ИНДЕКС($A$5:$A$16;ПОИСКПОЗ(«яяяя»;$A$5:ИНДЕКС($A$5:$A$16;СТРОКА()-СТРОКА($A$4))))  

  2 KL:  
Ты, как всегда, умеешь приятно удивить :-) Хоть твой вариант и гораздо сложнее, он всё равно вызывает улыбку и положительные эмоции, поскольку ты сумел замутить такое хитроумное решение :-)  

  {quote}{login=KL}{date=02.10.2009 06:20}{thema=}{post}я исходил из того, что столбцы/строки могут быть неодинаковой длинны.{/post}{/quote}  
Что-то подобное попытался сделать и я (см. вложение)

 

@Nik,  

  Спасибо на добром слове. Вообще-то я имел в виду ситуацию, например, с такими исходными данными:  

  x  
1  
2  
3  
y  
4  
5  
6  
7  
z  
8  
9

 

@Nik

Пользователь

Сообщений: 138
Регистрация: 01.01.1970

 

@Nik

Пользователь

Сообщений: 138
Регистрация: 01.01.1970

{quote}{login=Саша}{date=02.10.2009 01:39}{thema=}{post}Пытался … решить задачу с первой страницы форума, связанную с поиском повторяющихся значений в другом файле, через вышеупомянутый массив чтобы не было нужно открывать все файлы для пересчёта. Приемлемого результата так и не добился :({/post}{/quote}Ну, то мы файл-пример увидим? ;-)

 

Саша

Пользователь

Сообщений: 607
Регистрация: 16.01.2013

#29

05.10.2009 22:05:46

@Nik, бегло просмотрел последние несколько страниц-не нашёл. На днях обязательно найду и выложу, просто в небольшой запарке сейчас. Ну и, как выразился KL, решение той конкретной задачи этим эм…методом в любом случае имеет смысл делать только из спортивного интереса.  

  Я бегло просмотрел приведённые вами формулы, вроде бы это не то, отчасти в связи с тем, что я неправильно объяснил задачу. Не отвечал, т к подробно не рассмотрел ещё, обязательно подниму эту тему в ближайшем будущем, сформулировав проблему нормально.  
Я не неблагодарная скотинка, честно, просто, опять же, не успел ещё просмотреть полностью… Большое спасибо и тебе и KL за обучение меня неразумного. :)

Функция ПОИСКПОЗ и повторяющиеся значения

taxi_driver

Дата: Пятница, 19.04.2013, 20:06 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


Добрый вечер

Прошу подкорректировать мою работу, если же направление решения задачи не правильное в корне, то приму любую критику…

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

К сообщению приложен файл:

0345114.xls
(48.0 Kb)

 

Ответить

AlexM

Дата: Пятница, 19.04.2013, 20:27 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

В ячейке Н9 ошибка, так как обозначения А200.0539.000.012 НЕТ в столбце Е на листе журнал_сдачи.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

taxi_driver

Дата: Пятница, 19.04.2013, 21:44 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


Цитата (AlexM)

В ячейке Н9 ошибка, так как обозначения А200.0539.000.012 НЕТ в столбце Е на листе журнал_сдачи.

УГУ я ее специально сделал, потому как это и есть вопрос biggrin

ладно спрошу иначе, как сделать так что бы на листе силовой отсек на против позиции А200.0539.000.011
в колонке НАРЯД было написаны фамилии всех рабочих которые ее изготавливали????

а именно :
Грипенко
ГИЛИН_2

 

Ответить

Serge_007

Дата: Пятница, 19.04.2013, 22:26 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Так можно


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

taxi_driver

Дата: Пятница, 19.04.2013, 22:43 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


Serge_007, ух ты ж,

формула длиной аж до моего города

завтра на работе обкатаю, обязательно отпишусь

Сообщение отредактировал taxi_driverПятница, 19.04.2013, 22:43

 

Ответить

Serge_007

Дата: Пятница, 19.04.2013, 22:45 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (taxi_driver)

формула длиной аж до моего города

Формула вообще-то достаточно короткая, просто она повторяется несколько раз, для того что бы в одну ячейку можно несколько результатов запихнуть было

Дурацкая затея


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

AlexM

Дата: Суббота, 20.04.2013, 00:15 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Можно применить функцию пользователя
См. файл



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

taxi_driver

Дата: Суббота, 20.04.2013, 18:04 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


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

если возможно, распишите (можно в личку), что означает каждая строка в вашей функции, — так общего развития

или хотя бы подскажите как убрать мягкие переносы

Сообщение отредактировал taxi_driverСуббота, 20.04.2013, 18:48

 

Ответить

AlexM

Дата: Суббота, 20.04.2013, 23:13 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003


Как то так



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

taxi_driver

Дата: Воскресенье, 21.04.2013, 06:45 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


вот, смог изменить под подобную задачу, убрать мягкий перенос все равно не смог

& Chr(10) — то означает цифра 10?

К сообщению приложен файл:

__.xls
(40.5 Kb)

Сообщение отредактировал taxi_driverВоскресенье, 21.04.2013, 06:51

 

Ответить

ikki

Дата: Воскресенье, 21.04.2013, 07:12 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1906


Репутация:

504

±

Замечаний:
0% ±


Excel 2003, 2010

число 10 в кодировке ASCII как раз и означает символ новой строки.
для расширения кругозора: http://ru.wikipedia.org/wiki/Перевод_строки

а вам достаточно будет
[vba]

Код

WorkMan = Join(b, «;»)

[/vba]


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki

 

Ответить

taxi_driver

Дата: Воскресенье, 21.04.2013, 09:55 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 34


Репутация:

1

±

Замечаний:
0% ±


ikki, спасибо, более чем исчерпывающий ответ

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel поиск части текста в диапазоне ячеек
  • Excel поискпоз по строке
  • Excel поиск ячейки с заданным значением
  • Excel поиск цифр в тексте
  • Excel поискпоз по двум условиям