Excel поиск последнего совпадения в столбце
Все классические функции поиска и подстановки типа ВПР (VLOOKUP) , ГПР (HLOOKUP) , ПОИСКПОЗ (MATCH) и им подобные имеют одну важную особенность - они ищут от начала к концу, т.е. слева-направо или сверху-вниз по исходным данным. Как только находится первое подходящее совпадение - поиск останавливается и найденным оказывается только первое вхождение нужного нам элемента.
Что же делать, если нам требуется найти не первое, а последнее вхождение? Например, последнюю сделку по клиенту, последний платёж, самую свежую заявку и т.д.?
Способ 1. Поиск последней строки формулой массива
Если в исходной таблице нет столбца с датой или порядковым номером строки (заказа, платежа. ), то наша задача сводится, по сути, к поиску последней строки, удовлетворяющей заданному условию. Реализовать подобное можно вот такой формулой массива:
- Функция ЕСЛИ(IF) проверяет по очереди все ячейки в столбце Клиент и выводит номер строки, если в ней лежит нужное нам имя. Номер строки на листе нам даёт функция СТРОКА(ROW) , но поскольку нам нужен номер строки в таблице, то дополнительно приходится вычитать 1, т.к. у нас в таблице есть шапка.
- Затем функция МАКС(MAX) выбирает из сформированного набора номеров строк максимальное значение, т.е. номер самой последней строки клиента.
- Функция ИНДЕКС(INDEX) выдаёт содержимое ячейки с найденным последним номером из любого другого требуемого столбца таблицы (Код заказа).
Всё это нужно вводить как формулу массива, т.е.:
- В Office 365 с последними установленными обновлениями и поддержкой динамических массивов - можно просто жать Enter .
- Во всех остальных версиях после ввода формулы придется нажимать сочетание клавиш Ctrl + Shift + Enter , что автоматически добавит к ней фигурные скобки в строке формул.
Способ 2. Обратный поиск новой функцией ПРОСМОТРХ
Я уже писал большую статью с видео про новую функцию ПРОСМОТРХ (XLOOKUP) , которая появилась в последних версиях Office на замену старушке ВПР (VLOOKUP) . При помощи ПРОСМОТРХ наша задача решается совершенно элементарно, т.к. для этой функции (в отличие от ВПР) можно явно задавать направление поиска: сверху-вниз или снизу-вверх - за это отвечает её последний аргумент (-1):
Способ 3. Поиск строки с последней датой
Если в исходных данных у нас есть столбец с порядковым номером или датой, играющей аналогичную роль, то задача видоизменяется - нам требуется найти уже не последнюю (самую нижнюю) строку с совпадением, а строку с самой поздней (максимальной) датой.
Как это сделать с помощью классических функций я уже подробно разбирал, а теперь давайте попробуем использовать мощь новых функций динамических массивов. Исходную таблицу для пущей красоты и удобства тоже заранее преобразуем в "умную" с помощью сочетания клавиш Ctrl + T или команды Главная - Форматировать как таблицу (Home - Format as Table) .
С их помощью этой "убойной парочки" наша задача решается весьма изящно:
- Сначала функция ФИЛЬТР(FILTER) отбирает только те строки из нашей таблицы, где в столбце Клиент - нужное нам имя.
- Потом функция СОРТ(SORT) сортирует отобранные строки по убыванию даты, чтобы самая последняя сделка оказалась сверху.
- Функция ИНДЕКС(INDEX) извлекает первую строку, т.е. выдает нужную нам последнюю сделку.
- И, наконец, внешняя функция ФИЛЬТР убирает из результатов лишние 1-й и 3-й столбцы (Код заказа и Клиент) и оставляет только дату и сумму. Для этого используется массив констант >, определяющий какие именно столбцы мы хотим (1) или не хотим (0) выводить.
Способ 4. Поиск последнего совпадения в Power Query
Ну, и для полноты картины, давайте рассмотрим вариант решения нашей задачи обратного поиска с помощью надстройки Power Query. С её помощью всё решается очень быстро и красиво.
1 . Преобразуем нашу исходную таблицу в "умную" с помощью сочетания клавиш Ctrl + T или команды Главная - Форматировать как таблицу (Home - Format as Table) .
2 . Загружаем её в Power Query кнопкой Из таблицы/диапазона на вкладке Данные (Data - From Table/Range) .
3 . Сортируем (через выпадающий список фильтра в шапке) нашу таблицу по убыванию даты, чтобы самые последние сделки оказались сверху.
4 . На вкладке Преобразование выбираем команду Группировать по (Transform - Group By) и задаем группировку по клиентам, а в качестве агрегирующей функции выбираем вариант Все строки (All rows) . Назвать новый столбец можно как угодно - например Подробности.
После группировки получим список уникальных имен наших клиентов и в столбце Подробности - таблицы со всеми сделками каждого из них, где первой строкой будет идти самая последняя сделка, которая нам и нужна:
5 . Добавляем новый вычисляемый столбец кнопкой Настраиваемый столбец на вкладке Добавить столбец (Add column - Add custom column) и вводим следующую формулу:
Здесь Подробности - это столбец, откуда мы берем таблицы по клиентам, а - это номер строки, которую мы хотим извлечь (нумерация строк в Power Query начинается с нуля). Получаем столбец с записями ( Record ), где каждая запись - первая строка из каждой таблицы:
Осталось развернуть содержимое всех записей кнопкой с двойными стрелками в шапке столбца Последняя сделка, выбрав нужные столбцы:
. и удалить потом ненужный более столбец Подробности щёлкнув по его заголовку правой кнопкой мыши - Удалить столбцы (Remove columns) .
После выгрузки результатов на лист через Главная - Закрыть и загрузить - Закрыть и загрузить в (Home - Close & Load - Close & Load to. ) получим вот такую симпатичную таблицу со списком последних сделок, как и хотели:
При изменении исходных данных результаты нужно не забыть обновить, щёлкнув по ним правой кнопкой мыши - команда Обновить (Refresh) или сочетанием клавиш Ctrl + Alt + F5 .
Рассмотрим таблицу продаж, состоящую из столбцов Дата продажи и Сумма. Т.к. в день может быть несколько продаж, то столбец с датами содержит повторы. Задав в качестве критерия поиска дату, найдем номер строки, в которой содержится дата и сумма последней продажи (т.е. последний повтор даты, указанной в критерии). Найдем сумму первой и последней продажи в этот день.
Пусть таблица продаж размещена в диапазоне A7:B41 . Даты продажи отсортированы по возрастанию.
Задача
Определим Сумму первой и последней продажи в заданный день (см. файл примера )
Решение
Для удобства определим Именованный диапазон Весь_диапазон_Дат как ссылку на диапазон =лист1!$A$7:$A$41
Дату продажи (ячейка D7 ) будем выбирать с помощью Выпадающего списка .
Это будет гарантировать, что в качестве критерия для поиска будут введены только даты из таблицы. Т.к. даты в таблице повторяются, а Выпадающий список не должен содержать повторы, то для источника строк Выпадающего списка сформируем в столбце H список Уникальных значений .
Сумму первой продажи найдем с помощью стандартной функции ВПР() с критерием ЛОЖЬ (точное совпадение) : =ВПР(D7;A7:B41;2;ЛОЖЬ)
В случае повторяющихся значений функция ВПР() с критерием ЛОЖЬ возвращает первое (сверху) найденное значение, то что нам и требуется.
Сумму первой продажи найдем с помощью стандартной функции ВПР() с критерием ИСТИНА (приблизительное совпадение) : =ВПР(D7;A7:B41;2;ИСТИНА)
В случае повторяющихся значений функция ВПР() с критерием ИСТИНА возвращает наибольшее найденное значение, которое меньше или равно, чем искомое значение. Т.к. перечень дат сортирован по возрастанию и искомое значение заведомо имеется в списке, то найденное значение как раз и будет последним повтором даты, указанной в качестве критерия.
В файле примера с помощью Условного форматирования серым фоном выделены строки, содержащие информацию о продажах в указанный день. Строка с последней продажей в этот день выделена зеленым фоном.
Альтернативное решение
Решить задачу можно также с помощью формулы, которая определит строку содержащую последний повтор (т.е. последнюю продажу в заданный день): =СУММПРОИЗВ(МАКС((D7=Весь_диапазон_Дат)*(СТРОКА(Весь_диапазон_Дат))))
Формула разместим в ячейке E10 . Этапы вычислений можно легко увидеть с помощью клавиши F9 (выделите в Строке формул , например, выражение D2=Весь_диапазон_Дат , нажмите F9 , вместо формулы отобразится ее результат).
А сумму последней продажи в заданный день можно найти с помощью функции ИНДЕКС() : =ИНДЕКС(B7:B41;E10-СТРОКА(B6))
Для нахождения позиции значения в столбце, с последующим выводом соответствующего значения из соседнего столбца в EXCEL, существует специальная функция ВПР() , но для ее решения можно использовать также и другие функции. Рассмотрим задачу в случае текстовых значений.
Пусть в диапазоне А4:В15 имеется таблица с перечнем сотрудников и их зарплат (фамилии сотрудников не повторяются).
Задача
Требуется, введя в ячейку D4 фамилию сотрудника, вывести в другой ячейке его зарплату. Решение приведено в файле примера .
Решение
Алгоритм решения задачи следующий:
- находим в списке кодов значение, совпадающее с критерием;
- определяем номер позиции (строку) найденного значения;
- выводим значение из соседнего столбца той же строки.
Решение практически аналогично поиску числового значения из статьи Поиск позиции ЧИСЛА с выводом соответствующего значения из соседнего столбца . Для этого типа задач в EXCEL существует специальная функция ВПР() , но для ее решения можно использовать и другие функции (про функцию ВПР() см. эту статью ).
Решение
Если несколько значений удовл. критерию
берется первое сверху
берется первое сверху
берется первое сверху
= ДВССЫЛ(АДРЕС(НАИБОЛЬШИЙ( ЕСЛИ(($A$4:$A$15=$D$4); СТРОКА($A$4:$A$15));1);2))
берется последнее сверху
если столбец отсортирован по возрастанию, то берется последнее сверху, если нет, то результат непредсказуем
соответствующие значения суммируются
соответствующие значения суммируются
Для функции ВПР() требуется, чтобы столбец, по которому производится поиск, был левее столбца, который используется для вывода. Обойти это ограничение позволяет, например, вариант с использованием функций ИНДЕКС() и ПОИСКПОЗ() . Эквивалентная формула приведена в статье о функции ВПР() .
Задача подразумевает, что диапазон поиска содержит неповторяющиеся значения. В самом деле, если критерию удовлетворяет сразу несколько значений, то из какой строки выводить соответствующее ему значение из соседнего столбца? Если все же диапазон поиска содержит повторяющиеся значения, то второй столбец из таблицы выше поясняет какое значение будет выведено (обычно возвращается первое значение, удовлетворяющее критерию).
Если диапазон поиска содержит повторяющиеся значения и требуется вернуть не одно, а все значения, удовлетворяющие критерию, то читайте статью Запрос на основе Элементов управления формы .
Совет : Если в диапазон поиска постоянно вводятся новые значения, то для исключения ввода дубликатов следует наложить определенные ограничения (см. статью Ввод неповторяющихся значений ). Для визуальной проверки наличия дубликатов можно использовать Условное форматирование (см. статью Выделение повторяющихся значений ).
Для организации динамической сортировки пополняемого диапазона поиска можно использовать идеи из статьи Сортированный список .
Как найти последнее вхождение определенного значения в списке в Excel?
Обычно при использовании функции Vlookup для поиска значения она возвращает соответствующий результат для первого совпадения. Если в списке есть несколько совпадающих элементов, и вы хотите вернуть последнее совпадающее вхождение, как вы можете это сделать? В этом руководстве представлены два метода, которые помогут вам легко разобраться с этим.
Найдите последнее вхождение определенного значения в списке с помощью формулы
Как показано на скриншоте ниже, в столбце B есть несколько «KTW», но вы хотите найти только последний и вернуть соответствующее значение в столбце C в ячейке F2. Пожалуйста, попробуйте следующую формулу массива.
1. Выберите пустую ячейку, скопируйте в нее приведенную ниже формулу и нажмите Ctrl + Shift + Enter ключи для вывода результата.
=INDEX($C$2:$C$13,MATCH(2,1/(B2:B13=E2)))
Примечание: В формуле 2 канадских доллара: 13 канадских долларов это диапазон столбцов, содержащий возвращаемое вами значение; B2: B13 это диапазон столбцов, который вы ищете; E2 содержит критерии, на основе которых вы будете выполнять поиск.
Легко найти последнее вхождение определенного значения в списке с помощью замечательного инструмента
Здесь рекомендую использовать ПОСМОТРЕТЬ снизу вверх полезности Kutools for Excel. С помощью этой удобной функции вы можете легко найти последнее вхождение определенного значения в списке всего несколькими щелчками мыши.
Перед применением Kutools for Excel, Пожалуйста, сначала скачайте и установите.
1. Нажмите Кутулс > Супер ПОСМОТРЕТЬ > ПОСМОТРЕТЬ снизу вверх чтобы включить функцию. Смотрите скриншот:
2. в ПОСМОТРЕТЬ снизу вверх диалоговое окно, настройте следующим образом.
- Выберите ячейки значений поиска и выходные ячейки в Значения поиска и Выходной диапазон раздел;
- Выберите весь диапазон данных, ключевой столбец, который вы ищете, и столбец возврата в Диапазон данных раздел;
- Нажмите OK кнопку, чтобы сразу получить результаты. Смотрите скриншот:
Если вы хотите получить бесплатную (30-дневную) пробную версию этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Статьи по теме
Найдите самые ранние и самые поздние даты в диапазоне в Excel
В столбце дат нелегко быстро узнать самую раннюю и самую позднюю дату, если вы не можете отсортировать даты. На самом деле, есть несколько хитрых способов легко и удобно узнать самые ранние и самые поздние даты в Excel, вы можете воспользоваться методами, описанными в этой статье, чтобы узнать их.
Vlookup для сравнения двух списков на отдельных листах
Предположим, у вас есть два листа «Имя-1» и «Имя-2» со списком имен, и теперь вы хотите сравнить эти два списка и найти совпадающие имена в «Имена-1», если они выходят в «Имена-2». Провести такое сравнение вручную по одному между двумя листами болезненно. В этой статье представлены некоторые быстрые приемы, которые помогут вам завершить ее без усилий.
Vlookup и суммирование совпадений в строках или столбцах в Excel
Использование функции vlookup и sum поможет вам быстро найти указанные критерии и одновременно суммировать соответствующие значения. В этой статье мы собираемся показать вам два метода vlookup и суммирования первого или всех совпавших значений в строках или столбцах Excel.
Подсчитайте все совпадения / дубликаты между двумя столбцами в Excel
Сравнение двух столбцов данных и подсчет всех совпадений или дубликатов в двух столбцах может быть обычной задачей для большинства из нас. Например, у вас есть два столбца с именами, некоторые имена появляются как в первом, так и во втором столбцах, теперь вы хотите подсчитать все совпадающие имена (совпадения, расположенные в любом месте в двух столбцах) между двумя столбцами, как показано на скриншоте ниже, этот учебник представит некоторые формулы для достижения этой цели в Excel.
- Подсчитайте все совпадения между двумя столбцами с помощью функций СУММПРОИЗВ и СЧЁТЕСЛИ
- Подсчитайте все совпадения между двумя столбцами с помощью функций СЧЁТ и ПОИСКПОЗ
- Подсчитайте все совпадения между двумя столбцами с помощью функций СУММПРОИЗВ, ЕЧИСЛО и ПОИСКПОЗ.
Подсчитайте все совпадения между двумя столбцами с помощью функций СУММПРОИЗВ и СЧЁТЕСЛИ
Чтобы подсчитать все совпадения между двумя столбцами, вам может помочь комбинация функций СУММПРОИЗВ и СЧЁТЕСЛИ, общий синтаксис:
- range1, range2 : Два диапазона содержат данные, по которым вы хотите подсчитать все совпадения.
Теперь введите или скопируйте приведенную ниже формулу в пустую ячейку и нажмите Enter ключ для получения результата:
Пояснение к формуле:
= СУММПРОИЗВ (СЧЁТЕСЛИ (A2: A12; C2: C12))
- СЧЁТЕСЛИ (A2: A12; C2: C12) : Эта функция СЧЁТЕСЛИ проверяет, существует ли каждое имя из столбца C в столбце A. Если имя существует, отображается число 1, в противном случае отображается число 0. Функция вернет следующий результат: .
- SUMPRODUCT(COUNTIF(A2:A12,C2:C12))=SUMPRODUCT() : Функция СУММПРОИЗВ суммирует все элементы в этом массиве и получает результат: 5.
Подсчитайте все совпадения между двумя столбцами с помощью функций СЧЁТ и ПОИСКПОЗ
С помощью комбинации функций СЧЁТ и ПОИСКПОЗ вы также можете получить количество совпадений между двумя столбцами, общий синтаксис:
- range1, range2 : Два диапазона содержат данные, по которым вы хотите подсчитать все совпадения.
Введите или скопируйте следующую формулу в пустую ячейку и нажмите Shift + Ctrl + Enter вместе, чтобы получить правильный результат, см. снимок экрана:
Пояснение к формуле:
= СЧЁТ (ПОИСКПОЗ (A2: A12; C2: C12,0))
- ПОИСКПОЗ (A2: A12; C2: C12,0) : Эта функция ПОИСКПОЗ будет искать имена из столбца A в столбце C и возвращать положение каждого совпадающего значения. Если значение не найдено, отображается значение ошибки. Итак, вы получите следующий список массивов: .
- COUNT(MATCH(A2:A12,C2:C12,0))= COUNT() : Функция COUNT подсчитает числа в списке массивов, чтобы получить результат: 5.
Подсчитайте все совпадения между двумя столбцами с помощью функций СУММПРОИЗВ, ЕЧИСЛО и ПОИСКПОЗ.
В Excel вы можете попытаться найти совпадения в двух столбцах и посчитать их, используя функции СУММПРОИЗВ, ЕЧИСЛО и ПОИСКПОЗ, общий синтаксис следующий:
- range1, range2 : Два диапазона содержат данные, по которым вы хотите подсчитать все совпадения.
Введите или скопируйте приведенную ниже формулу в пустую ячейку, чтобы вывести результат, а затем нажмите Enter ключ для возврата расчета, см. снимок экрана:
Пояснение к формуле:
= СУММПРОИЗВ (- (ISNUMBER (MATCH (A2: A12; C2: C12,0))))
Читайте также: