Поиск последнего ненулевого значения excel

Поиск последней непустой ячейки в строке или столбце функцией ПРОСМОТР

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

Поиск последней непустой ячейки в строке или столбце Excel

Задача: найти значение продаж в последнем месяце по каждому филиалу, т.е. для Москвы это будет 78, для Питера — 41 и т.д.

Если бы в нашей таблице не было пустых ячеек, то путь к решению был бы очевиден — можно было бы посчитать количество заполненных ячеек в каждой строке и брать потом ячейку с этим номером. Но филиалы работают неравномерно: Москва простаивала в марте и августе, филиал в Тюмени открылся только с апреля и т.д., поэтому такой способ не подойдет.

Универсальным решением будет использование функции ПРОСМОТР (LOOKUP):

Поиск последней непустой ячейки функцией ПРОСМОТР

У этой функции хитрая логика:

  • Она по очереди (слева-направо) перебирает непустые ячейки в диапазоне (B2:M2) и сравнивает каждую из них с искомым значением (9999999).
  • Если значение очередной проверяемой ячейки совпало с искомым, то функция останавливает просмотр и выводит содержимое ячейки.
  • Если точного совпадения нет и очередное значение меньше искомого, то функция переходит к следующей ячейке в строке.

Легко сообразить, что если в качестве искомого значения задать достаточно большое число, то функция пройдет по всей строке и, в итоге, выдаст содержимое последней проверенной ячейки. Для компактности, можно указать искомое число в экспоненциальном формате, например 1E+11 (1*1011 или сто миллиардов).

Если в таблице не числа, а текст, то идея остается той же, но «очень большое число» нужно заменить на «очень большой текст»:

Поиск последнего текстового значения в строке

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

  1. латиница прописные (A-Z)
  2. латиница строчные (a-z)
  3. кириллица прописные (А-Я)
  4. кириллица строчные (а-я)

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

Вот так. Не совсем очевидное, но красивое и компактное решение. Для поиска последней непустой ячейки в столбцах работает тоже «на ура».

Ссылки по теме

  • Поиск и подстановка по нескольким условиям (ВПР по 2 и более критериям)
  • Поиск ближайшего похожего текста (max совпадений символов)
  • Двумерный поиск в таблице (ВПР 2D)

Поиск последнего ненулевого или текстового значения столбца

cerber412

Дата: Вторник, 24.01.2017, 06:50 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 131


Репутация:

0

±

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


Excel 2013

Здравствуйте.
Помогите решить вопрос.

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

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

398-2.xls
(28.5 Kb)

 

Ответить

китин

Дата: Вторник, 24.01.2017, 07:24 |
Сообщение № 2

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016

навскидку вот такая формула массива

Код

=ПРОСМОТР(9^99;ЕСЛИ((ЕЧИСЛО($J$5:$J$27))*(J5:J27<>0);$J$5:$J$27);F5:F27&» «&G5:G27)

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

222111.xls
(29.0 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Pelena

Дата: Вторник, 24.01.2017, 08:58 |
Сообщение № 3

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Или так

Код

=ПРОСМОТР(;-1/(J5:J27>0);F5:F27&» «&G5:G27)

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

2703791.xls
(29.0 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

cerber412

Дата: Вторник, 24.01.2017, 11:28 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 131


Репутация:

0

±

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


Excel 2013

китин, Pelena, оба варианта работают.
Большое спасибо вам.

 

Ответить

Che79

Дата: Вторник, 24.01.2017, 17:03 |
Сообщение № 5

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

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

Сообщений: 1649


Репутация:

306

±

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


2013 Win, 365 Mac

Вне конкурса, для поклонников ВПР вот такой бездумный вариант :)
массивная

Код

{=ВПР(ПРОСМОТР(;-1/(J5:J27<>0);J5:J27);ВЫБОР({1;2};J5:J27;F5:F27&» «&G5:G27);{2;3};)}

идея взята из этой темы
не сочтите за оффтоп, просто ради тренировки собственных мозгов в рабочее время

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

170124.xls
(23.0 Kb)


Делай нормально и будет нормально!

 

Ответить

На чтение 7 мин. Просмотров 30k.

Содержание

  1. Получить первое не пустое значение в списке
  2. Получить первое текстовое значение в списке
  3. Получить первое текстовое значение с ГПР
  4. Получить позицию последнего совпадения
  5. Получить последнее совпадение содержимого ячейки
  6. Получить n-е совпадение
  7. Получить n-ое совпадение с ИНДЕКС/ПОИСКПОЗ
  8. Получить n-ое совпадение с ВПР
  9. Если ячейка содержит одну из многих вещей
  10. Поиск первой ошибки
  11. Поиск следующего наибольшего значения
  12. Несколько совпадений в списке, разделенных запятой
  13. Частичное совпадение чисел с шаблоном
  14. Частичное совпадение с ВПР
  15. Положение первого частичного совпадения

Получить первое не пустое значение в списке

{ = ИНДЕКС( диапазон ; ПОИСКПОЗ( ЛОЖЬ; ЕПУСТО ( диапазон ); 0 )) }

Получить первое не пустое значение в списке

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

В данном примере мы используем эту формулу:

{ = ИНДЕКС( B3: B11; ПОИСКПОЗ( ЛОЖЬ; ЕПУСТО ( B3: B11 ); 0 )) }

Таким образом, суть проблемы заключается в следующем: мы хотим получить первую не пустую ячейку, но для этого нет конкретной формулы в Excel. Мы могли бы использовать ВПР с шаблоном *, но это будет работать только для текста, а не для чисел.

Таким образом, нам нужно строить функциональные возможности для нужных нам формул. Способ сделать это состоит в использовании функции массива, которая «тестирует» ячейки и возвращает массив истина/ложь значения, которые мы можем сопрягать с ПОИСКПОЗ.

Работая изнутри, ЕПУСТО оценивает ячейки в диапазоне В3: В11 и возвращает результат и массив, который выглядит следующим образом:

{ИСТИНА; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ИСТИНА; ИСТИНА; ИСТИНА}

Каждая ЛОЖЬ представляет собой ячейку в диапазоне, который не является пустой.

Далее, ПОИСКПОЗ ищет ЛОЖЬ внутри массива и возвращает позицию первого наденного совпадения, в этом случае 2. На данный момент, формула в примере теперь выглядит следующим образом:

{ = ИНДЕКС( B3: B11; 2; 0 )) }

И, наконец, функция ИНДЕКС выводит значение в положении 2 в массиве, в этом случае число 10.

Получить первое текстовое значение в списке

= ВПР ( «*»; диапазон; 1; ЛОЖЬ)

Если вам нужно получить первое текстовое значение в списке (диапазон один столбец), вы можете использовать функцию ВПР, чтобы установить точное соответствие, с шаблонным символом для поиска.

Получить первое текстовое значение в списке

В данном примере формула в D7 является:

= ВПР ( «*» ; B5: B11 ; 1 ; ЛОЖЬ)

Групповой символ звездочка (*) соответствует любому текстовому значению.

Получить первое текстовое значение с ГПР

= ГПР ( «*»; диапазон; 1; ЛОЖЬ)

Получить первое текстовое значение с ГПР

Для поиска и получения первого текстового значения во всем диапазоне столбцов, вы можете использовать функцию ГПР с групповым символом. В примере формула в F5 является:

= ГПР ( «*»; С5: Е5; 1; 0 )

Значение поиска является «*», групповым символом, который соответствует одному или более текстовому значению.

Получить позицию последнего совпадения

{ = МАКС( ЕСЛИ ( Величины = знач ; СТРОКА(величина) — СТРОКА(ИНДЕКС( Величины; 1 ; 1 )) + 1 )) }

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

Получить позицию последнего совпадения

В примере формула в G6:

=МАКС(ЕСЛИ(B4:B11=G5;СТРОКА(B4:B11)-СТРОКА(ИНДЕКС(B4:B11;1;1))+1))

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

Получить последнее совпадение содержимого ячейки

= ПРОСМОТР( 2 ; 1 / ПОИСК ( вещи ; А1 ); вещи )

Чтобы проверить ячейку для одной из нескольких вещей, и вернуть последнее совпадение, найденное в списке, вы можете использовать формулу, основанную на ПРОСМОТР и ПОИСК функций. В случае нескольких найденных совпадений, формула вернет последнее совпадение из списка «вещей».

Получить последнее совпадение содержимого ячейки

В примере формула в С5:

=ПРОСМОТР(2;1/ПОИСК($E$4:$E$7;B4);$E$4:$E$7)

Получить n-е совпадение

= НАИМЕНЬШИЙ( ЕСЛИ( логический тест; СТРОКА( список ) — МИН( СТРОКА( список )) + 1 ); n )

Для того, чтобы получить позицию n-го совпадения (например, второе значение соответствия заданному, третье значение соответствия и т.д.), вы можете использовать формулу, основанную на функции НАИМЕНЬШИЙ.

= НАИМЕНЬШИЙ( ЕСЛИ( список = E5 ; СТРОКА( список ) — МИН( СТРОКА( список )) + 1 ); F5 )

Эта формула возвращает позицию второго появления «красных» в списке.

Сутью этой формулы является функция НАИМЕНЬШИЙ, которая просто возвращает n-е наименьшее значение в списке значений, которое соответствует номеру строки. Номера строк были «отфильтрованы» функцией ЕСЛИ, которая применяет логику для совпадения.

Получить n-ое совпадение с ИНДЕКС/ПОИСКПОЗ

{ = ИНДЕКС( массив; НАИМЕНЬШИЙ( ЕСЛИ( величины = знач ; СТРОКА ( величины ) — СТРОКА ( ИНДЕКС( величины; 1 ; 1 )) + 1 ); n-й )) }

Получить n-ое совпадение с ИНДЕКС/ПОИСКПОЗ

Чтобы получить n-ое совпадение, используя ИНДЕКС и ПОИСКПОЗ, вы можете использовать формулу массива с функциями ЕСЛИ и НАИМЕНЬШИЙ, чтобы выяснить номер строки совпадения.

Получить n-ое совпадение с ВПР

= ВПР( id_формулы; стол; 4; 0 )

Чтобы получить n-ое совпадение с ВПР, вам необходимо добавить вспомогательный столбец в таблицу , которая строит уникальный идентификатор , который включает счетчик.

Получить n-ое совпадение с ВПР

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

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

=ВПР(J3&»-«&I6;B4:G11;4;0)

Если ячейка содержит одну из многих вещей

{ = ИНДЕКС( результаты ;ПОИСКПОЗ( ИСТИНА ; ЕЧИСЛО( ПОИСК( вещи ; A1 )); 0 )) }

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

{ = ИНДЕКС( результаты ; ПОИСКПОЗ( ИСТИНА ; ЕЧИСЛО( ПОИСК ( вещи ; B5 )); 0 )) }

Эта формула использует два названных диапазона: E5: E8 называется «вещи» и F5: F8 называется «Результаты». Убедитесь, что вы используете диапазоны имен с одинаковыми именами (на основе ваших данных). Если вы не хотите использовать именованные диапазоны, используйте абсолютные ссылки вместо этого.

Поиск первой ошибки

{ = ПОИСКПОЗ( ИСТИНА ; ЕОШИБКА(диап ); 0 ) }

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

Поиск первой ошибки

В приведенном примере формула:

{ = ПОИСКПОЗ( ИСТИНА ; ЕОШИБКА( B4: B11 ); 0 ) }

Работая изнутри, функция ЕОШИБКА возвращает значение ИСТИНА, если значение является признанной ошибкой, и ЛОЖЬ, если нет.

Когда дается диапазон ячеек (массив ячеек) функция ЕОШИБКА будет возвращать массив истина/ложь значений. В примере, это результирующий массив выглядит следующим образом:

{ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ЛОЖЬ; ИСТИНА; ЛОЖЬ; ЛОЖЬ}

Обратите внимание, что 6-е значение (что соответствует 6-й ячейке в диапазоне) истинно, так как ячейка В9 содержит #Н/A.

Поиск следующего наибольшего значения

=ИНДЕКС ( данные; ПОИСКПОЗ( поиск ; значения ) + 1 )

Поиск следующего наибольшего значения

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

=ИНДЕКС(C5:C9;ПОИСКПОЗ(F4;B5:B9)+1)

Несколько совпадений в списке, разделенных запятой

{ = ОБЪЕДИНИТЬ ( «;» ; ИСТИНА ; ЕСЛИ( диапазон1 = E5 ; диапазон2 ; «» )) }

Для поиска и извлечения нескольких совпадений, разделенных запятыми (в одной ячейке), вы можете использовать функцию ЕСЛИ с функцией ОБЪЕДИНИТЬ.

{ = ОБЪЕДИНИТЬ( «;» ; ИСТИНА ; ЕСЛИ( группа = E5 ; имя ; «» )) }

Эта формула использует «имя» — именованный диапазон (B5: B11) и «группа» — (C5: C11).

Частичное совпадение чисел с шаблоном

{ = ПОИСКПОЗ( «*» & номер & «*» ; ТЕКСТ( диапазон ; «0» ); 0 ) }

Для того, чтобы выполнить частичное совпадение (подстроки) против чисел, вы можете использовать формулу массива, основанную на ПОИСКПОЗ и ТЕКСТ.

Частичное совпадение чисел с шаблоном

Excel поддерживает символы подстановки «*» и «?». Тем не менее, если вы используете специальные символы с номером, вы будете преобразовывать числовое значение в текстовое значение. Другими словами, «*» & 99 & «*» = «* 99 *» (текстовая строка).

Если попытаться найти текстовое значение в диапазоне чисел, совпадение завершится неудачно.

Решение

Одно из решений заключается в преобразовании чисел в диапазоне поиска для текстовых значений, а затем сделать нормальный поиск с ПОИСКПОЗ, ВПР и т.д.

Другой вариант

Другой способ, чтобы преобразовать числа в текст, чтобы сцепить пустую строку. Эта формула работает так же, как выше формуле:

= ПОИСКПОЗ ( «*» & Е5 & «*» ; В5: В10 & «» ; 0 )

Частичное совпадение с ВПР

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

Частичное совпадение с ВПР

В примере формула ВПР выглядит следующим образом:

=ВПР($H$2&»*»;$B$3:$E$12;2;0)

В этой формуле, значение представляет собой именованный диапазон, который относится к Н2, а также данные , представляет собой именованный диапазон , который относится к B3: E102. Без названных диапазонов, формула может быть записана следующим образом:

Положение первого частичного совпадения

= ПОИСКПОЗ ( «* текст *» ; диапазон; 0 )

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

Положение первого частичного совпадения

В примере формула в Е7:

=ПОИСКПОЗ(«*»&E6&»*»;B5:B10;0)

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

ПОИСКПОЗ поддерживает подстановочное согласование со звездочкой «*» (один или несколько символов) или знаком вопроса «?» (один символ), но только тогда, когда третий аргумент, тип_сопоставления, установлен в ЛОЖЬ или ноль.

Вы когда-нибудь пытались найти последнее ненулевое значение в строке и вернуть соответствующий заголовок столбца в Excel? Эта статья познакомит вас с некоторыми формулами для выполнения этой задачи.


Поиск последнего ненулевого значения и возврат заголовка столбца с формулами

Чтобы определить последнее ненулевое значение и вернуть заголовок этого столбца, примените любую из следующих формул:

=INDEX($B$1:$J$1,MAX((COLUMN(B2:J2)-MIN(COLUMN(B2:J2))+1)*(B2:J2<>0)))   (Press Ctrl + Shift + Enter keys)
=LOOKUP(2,1/(B2:J2<>0),$B$1:$J$1)                                                                               (Press Enter key)

Внимание: В приведенной выше формуле B1: J1 заголовки столбцов, которые вы хотите вернуть, B2: J2 это строка данных, в которой вы хотите найти последнее ненулевое значение.

Затем перетащите маркер заполнения вниз, чтобы заполнить формулой другие ячейки, см. снимок экрана:


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (1)


Оценок пока нет. Оцените первым!

У меня есть 10 строк данных следующей формы:

00004
04000
03000
06000
00500
00001

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

000044
040004
030303
066006
055005
002011

Обратите внимание, что каждое значение выше находится в отдельной ячейке. Какой лучший способ сделать это?

Вы можете использовать цепочечные формулы, чтобы сначала заменить все ‘0’ ничем, а затем взять самый правый символ, например
=RIGHT(SUBSTITUTE(cell1&cell2&cell3...,"0",""),1)

Используйте следующую формулу массива:

=INDEX(A1:E1,MATCH(2,IF(A1:E1<>0,1)))

Будучи формулой массива, она должна быть подтверждена с помощью Ctrl-Shift-Enter при выходе из режима редактирования вместо Enter. Если все сделано правильно, тогда Excel поместит {} вокруг формулы.

ответ дан Scott Craner12k

С вашими данными в A1:E1 (и предполагая, что все значения являются целыми числами), вы можете использовать эту обычно вводимую формулу:

F1: =LOOKUP(2,1/A1:E1,A1:E1)

и заполнить вниз.

Если функция LOOKUP не может найти lookup_value, функция соответствует наибольшему значению в lookup_vector, которое меньше или равно lookup_value. 1/a1:e1 всегда будет возвращать значение меньше 2 или ошибку DIV/0 . Таким образом, функция вернет последнее ненулевое значение или, если все они равны нулю, ошибку NA .

ответ дан Ron Rosenfeld2k

Like this post? Please share to your friends:
  • Поиск последнего значения в строке excel
  • Поиск последнего значения в столбце excel по условию
  • Поиск последнего значения в столбце excel vba
  • Поиск последнего значения в списке excel
  • Поиск последнего значения больше 0 в столбце excel