Последняя непустая ячеек в excel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

I think the response from W5ALIVE is closest to what I use to find the last row of data in a column. Assuming I am looking for the last row with data in Column A, though, I would use the following for the more generic lookup:

=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))

The first MATCH will find the last text cell and the second MATCH finds the last numeric cell. The IFERROR function returns zero if the first MATCH finds all numeric cells or if the second match finds all text cells.

Basically this is a slight variation of W5ALIVE’s mixed text and number solution.

In testing the timing, this was significantly quicker than the equivalent LOOKUP variations.

To return the actual value of that last cell, I prefer to use indirect cell referencing like this:

=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))

The method offered by sancho.s is perhaps a cleaner option, but I would modify the portion that finds the row number to this:

=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)

the only difference being that the «,1» returns the first value while the «,0» returns the entire array of values (all but one of which are not needed). I still tend to prefer addressing the cell to the index function there, in other words, returning the cell value with:

=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))

Great thread!

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Еще…Меньше

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

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

Поиск последней ячейки с данными или форматированием на нем

  • Чтобы найти последнюю ячейку с данными или форматированием, щелкните в любом месте на нем и нажмите CTRL+END.

Примечание: Чтобы выбрать последнюю ячейку в строке или столбце, нажмите клавишу END, а затем клавишу СТРЕЛКА ВПРАВО или СТРЕЛКА ВНИЗ.

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

  1. Выполните одно из указанных ниже действий.

    • Чтобы выбрать все столбцы справа от последнего столбца с данными, щелкните первый заголовок столбца, нажмите и удерживайте нажатой кнопку CTRL, а затем щелкните заголовки столбцов, которые нужно выбрать.

      Совет: Можно также щелкнуть первый заголовок столбца и нажать CTRL+SHIFT+END.

    • Чтобы выбрать все строки под последней строкой с данными, щелкните заголовок первой строки, нажмите и удерживайте нажатой кнопку CTRL, а затем щелкните заголовки строк, которые нужно выбрать.

      Совет: Можно также щелкнуть заголовок первой строки и нажать CTRL+SHIFT+END.

  2. На вкладке Главная в группе Редактирование щелкните стрелку рядом с кнопкой Очистить Изображение кнопкии выберите очистить все.

  3. Сохраните лист.

  4. Закроем таблицу.

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

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

К началу страницы

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

I am having a lot of difficulty trying to come up with a way to ‘parse’ and ‘order’ my excel spreadsheet. What I essentially need to do is get the last non empty cell from every row and cut / paste it a new column.

I was wondering if there is an easy way to do this?

I appreciate any advice. Many thanks in advance!

asked Jul 6, 2013 at 18:50

AnchovyLegend's user avatar

AnchovyLegendAnchovyLegend

12k35 gold badges144 silver badges229 bronze badges

4

Are your values numeric or text (or possibly both)?

For numbers get last value with this formula in Z2

=LOOKUP(9.99E+307,A2:Y2)

or for text….

=LOOKUP("zzz",A2:Y2)

or for either…

=LOOKUP(2,1/(A2:Y2<>""),A2:Y2)

all the formulas work whether you have blanks in the data or not……

answered Jul 6, 2013 at 21:15

barry houdini's user avatar

barry houdinibarry houdini

45.5k8 gold badges63 silver badges80 bronze badges

3

Okay, from what you’ve given if I understood correctly, you can use this formula in cell J1 and drag it down for the other rows below this cell:

=INDEX(A1:I1,1,COUNTA(A1:I1))

This assumes that the ‘longest row’ goes up to the column I.

answered Jul 6, 2013 at 19:27

Jerry's user avatar

JerryJerry

70.1k13 gold badges99 silver badges143 bronze badges

1

You can also use OFFSET. You don’t need to specify an ending column, you can just reference the entire row.

=OFFSET(1:1,0,COUNTA(1:1)-1,1,1)

answered Jul 11, 2013 at 14:29

grandocu's user avatar

grandocugrandocu

3261 silver badge4 bronze badges

На чтение 10 мин. Просмотров 47.7k.

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

Уровень мастерства: средний

3 способа найти последнюю заполненную ячейку VBA

Видео: 3 части серии как найти последнюю ячейку с VBA

Видео лучше всего просматривать в полноэкранном режиме HD

Загрузите файл, содержащий код:

Find Last Cell VBA Примеры.xlsm (79.6 KB)

Поиск последней ячейки — все о данных

Поиск последней используемой строки, столбца или ячейки — это одна из самых распространенных задач при написании макросов и приложений VBA. Как и все в Excel и VBA, есть много различных способов.

Выбор правильного метода в основном зависит от того, как выглядят ваши данные.

В этой статье я объясняю три различных метода VBA объекта Range, которые мы можем использовать для поиска последней ячейки на листе. Каждый из этих методов имеет плюсы и минусы, а некоторые выглядят страшнее других. 🙂

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

#1 – The Range.End() Method

Range.End() очень похож на сочетание клавиш Ctrl+Arrow. В VBA можно использовать этот метод, чтобы найти последнюю не пустую ячейку в одной строке или столбце.

Диапазон.Пример кода End VBA

Sub Последняя_ячейка()
'Найти последнюю не пустую ячейку в одной строке или столбце

Dim lRow As Long
Dim lCol As Long
    
    'Найти последнюю не пустую ячейку в столбце А(1)
    lRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    'Найти последнюю непустую ячейку в строке 1
    lCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    MsgBox "Последняя строка: " & lRow & vbNewLine & _
            "Последний столбец: " & lCol
  
End Sub

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

Оператор Rows.Count возвращает количество всех строк на рабочем листе. Поэтому мы в основном указываем последнюю ячейку в столбце A листа (ячейка A1048567) и поднимаемся до тех пор, пока не найдем первую непустую ячейку.

Это работает так же с поиском последнего столбца. Он начинается с последнего столбца в строке, затем идет влево, пока в столбце не будет найдена последняя непустая ячейка. Columns.Count возвращает общее количество столбцов на листе. Итак, мы начинаем с последнего столбца и идем налево.

Аргумент для метода End указывает, в каком направлении идти.
Возможные варианты: xlDown, xlUp, xlToLeft, xlToRight.

Плюсы Range.End

  • Range.End прост в использовании и понимании, так как он работает так же, как сочетания клавиш Ctrl+Arrow.
  • Может использоваться для поиска первой пустой ячейки или последней непустой ячейки в одной строке или столбце.

Минусы Range.End

  • Range.End работает только с одной строкой или столбцом. При наличии диапазона данных, содержащего пробелы в последней строке или столбце, может быть трудно определить, в какой строке или столбце выполнять метод.
  • Если вы хотите найти последнюю используемую ячейку, то вы должны оценить по крайней мере два оператора. Один, чтобы найти последнюю строку и один, чтобы найти последний столбец. Затем их можно объединить для ссылки на последнюю ячейку.

Вот справочные статьи для Range.End

  • Страница справки MSDN для Range.End
  • Справка MSDN для перечислений xlDirection

#2 – The Range.Find() Method

Последнее значение в столбце Excel

Метод Range.Find — я предпочитаю этот способ, чтобы найти последнюю строку, столбец или ячейку. Он самый универсальный, но и самый страшный.

Последнее значение в столбце Excel

У Range.Find много аргументов, но пусть это вас не пугает. Когда вы знаете, что они делают, вы можете использовать Range.Find для многих вещей в VBA.

Range.Find — это в основном способ программирования меню «Find» в Excel. Он делает то же самое, и большинство аргументов Range.Find являются опциями в меню Find.

Последнее значение в столбце Excel

Пример кода Range.Find

Ниже
приведен код для поиска последней непустой строки.            

Sub Последняя_ячейка_Find()
'Находит последнюю непустую ячейку на листе / диапазоне.

Dim lRow As Long
Dim lCol As Long
    
    lRow = Cells.Find(What:="*", _
                    After:=Range("A1"), _
                    LookAt:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Row
    
    MsgBox "Последняя строка: " & lRow

End Sub

Метод Range.Find. Пояснения

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

Начиная с ячейки A1, он перемещается назад (xlPrevious) и
фактически начинает поиск в самой последней ячейке на листе. Затем он
перемещается справа налево (xlByRows) и проходит по каждой строке, пока не
найдет непустую ячейку. При обнаружении непустого он останавливается и
возвращает номер строки.

Range.Find VBA Excel

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

  • What:=”*” — звездочка — это символ подстановки, который находит любой текст или число в ячейке. Это в основном то же самое, что и поиск непустой ячейки.
  • After:=Range(“A1”)— начать поиск после ячейки А1, первой ячейки на листе. Это означает, что A1 не будет искать. Поиск начнется после A1, и следующая ячейка, которую он ищет, зависит от SearchOrder и SearchDirection. Этот аргумент можно изменить, чтобы он начинался в другой ячейке, просто помните, что поиск фактически начинается в ячейке после указанной.
  • LookAt: = xlPart — это будет смотреть на любую часть текста внутри ячейки. Другой вариант — xlWhole, который будет пытаться соответствовать всему содержимому ячейки.
  • LookIn: = xlFormulas — Это заставляет Find искать в формулах, и это важный аргумент. Другой вариант — xlValues, который будет искать только значения. Если у вас есть формулы, которые возвращают пробелы (= IF (A2> 5, «Ok», «»), то вы можете считать это непустой ячейкой. При указании LookIn в качестве xlFormulas эта формула будет считаться непустой, даже если возвращаемое значение пустое.
  • SearchOrder: = xlByRows — это говорит Find, чтобы искать через каждую целую строку прежде, чем перейти к следующей. Направление поиска слева направо или справа налево зависит от аргумента SearchDirection. Другой вариант здесь — xlByColumns, который используется при поиске последнего столбца.
  • SearchDirection: = xlPrevious — указывает направление поиска. xlPrevious означает, что он будет искать справа налево или снизу вверх. Другой вариант — xlNext, который перемещается в противоположном направлении.
  • MatchCase: = False — это говорит Find, чтобы не рассматривать заглавные или строчные буквы. Если установить значение True, это поможет. Этот аргумент не является необходимым для этого сценария.

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

Плюсы
Range.Find

  • Find ищет во всем диапазоне последнюю непустую строку или столбец. Он НЕ ограничен одной строкой или столбцом.
  • Последняя строка в наборе данных может содержать пробелы, и Range.Find все равно найдет последнюю строку.
  • Аргументы могут использоваться для поиска в разных направлениях и для определенных значений, а не только пустых ячеек.

Минусы Range.Find

  • Это ужасно. Метод содержит 9 аргументов. Хотя требуется только один из этих аргументов (Что), вы должны привыкнуть использовать хотя бы первые 7 аргументов. В противном случае метод Range.Find по умолчанию будет использовать ваши последние использованные настройки в окне поиска. Это важно. Если вы не укажете необязательные аргументы для LookAt, LookIn и SearchOrder, тогда метод Find будет использовать те параметры, которые вы использовали последними в окне поиска Excel.
  • Нахождение последней ячейки требует двух утверждений. Один, чтобы найти последний ряд и один, чтобы найти последний столбец. Затем вы должны объединить их, чтобы найти последнюю ячейку.

Macro Recorder выручит!

Range.Find — все еще мой любимый метод для нахождения последней ячейки из-за ее универсальности. Но нужно много напечатать и запомнить. К счастью, вам это не нужно.

Вы можете использовать макро рекордер, чтобы быстро создать код со всеми аргументами.

  1. Запустить макро рекордер
  2. Нажмите Ctrl + F
  3. Затем нажмите кнопку «Найти далее»

Код для метода Find со всеми аргументами будет сгенерирован устройством записи макросов.

Используйте пользовательскую функцию для метода Find

Вы также можете использовать пользовательскую функцию (UDF) для метода поиска. Последняя функция Ron de Bruin — прекрасный пример. Вы можете скопировать эту функцию в любой проект или модуль кода VBA и использовать ее для возврата последней строки, столбца или ячейки.

У меня также есть аналогичная функция в примере рабочей книги. Моя функция просто имеет дополнительные аргументы для ссылки на лист и диапазон для поиска.

Вот справочные статьи для Range.Find

  • MSDN Help Article for Range.Find Method

#3 – Range.SpecialCells (xlCellTypeLastCell)

Метод SpecialCells делает то же самое, что и нажатие сочетания клавиш Ctrl + End, и выбирает последнюю использованную ячейку на листе.

Пример кода SpecialCells (xlCellTypeLastCell)

Sub Range_SpecialCells_Method()

    MsgBox Range("A1").SpecialCells(xlCellTypeLastCell).Address
      
End Sub

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

Часто вы будете нажимать Ctrl + End на клавиатуре и попадете в какую-нибудь ячейку вниз в конце листа, который определенно не используется. Это может произойти по ряду причин. Одной из распространенных причин является то, что свойства форматирования для этой ячейки были изменены. Простое изменение размера шрифта или цвета заливки ячейки помечает ее как использованную ячейку.

Плюсы Range.SpecialCells

  • Вы можете использовать этот метод, чтобы найти «используемые» строки и столбцы в конце листа и удалить их. Сравнение результата Range.SpecialCells с результатом Range.Find для непробелов может позволить вам быстро определить, существуют ли какие-либо неиспользуемые строки или столбцы на листе.
  • Удаление неиспользуемых строк / столбцов может уменьшить размер файла и увеличить полосу прокрутки.

Минусы Range.SpecialCells

  • Excel только сбрасывает последнюю ячейку при сохранении книги. Поэтому, если пользователь или макрос удаляет содержимое некоторых ячеек, этот метод не найдет истинную последнюю ячейку, пока файл не будет сохранен.
  • Он находит последнюю использованную ячейку, а НЕ последнюю непустую ячейку.

Другие методы поиска последней ячейки

Что ж, это должно охватывать основы поиска последней
использованной или непустой ячейки на листе. Если ваш лист содержит объекты
(таблицы, диаграммы, сводные таблицы, слайсеры и т. Д.), Вам может
потребоваться использовать другие методы для поиска последней ячейки. Я объясню
эти методы в отдельном посте.

У меня также есть статья о том, как найти ПЕРВУЮ ячейку в листе.

Пожалуйста, оставьте комментарий ниже, если у вас есть какие-либо вопросы, или вы все еще не можете найти последнюю ячейку. Я буду рад помочь!

Понравилась статья? Поделить с друзьями:
  • Последняя не пустая ячейка столбца excel
  • Последний лист кассовой книги бланк скачать word
  • Последняя не пустая ячейка excel vba
  • Последний день года excel
  • Последняя не пустая строка excel