Поиск номера последней заполненной строки с помощью кода VBA Excel для таблиц, расположенных как в верхнем левом углу, так и в любом месте рабочего листа.
Номер последней заполненной строки в таблице Excel обычно используется в коде VBA для определения следующей за ней первой пустой строки для добавления новой записи. А также для задания интервала для поиска и обработки информации с помощью цикла For… Next (указание границ обрабатываемого диапазона).
Переменную, которой присваивается номер последней строки, следует объявлять как Long или Variant, например: Dim PosStr As Long
. В современных версиях Excel количество строк на рабочем листе превышает максимальное значение типа данных Integer.
Таблица в верхнем левом углу
В первую очередь рассмотрим все доступные варианты поиска номера последней заполненной строки для таблиц, расположенных в верхнем левом углу рабочего листа. Такие таблицы обычно представляют собой простые базы данных в Excel, или, как их еще называют, наборы записей.
Вариант 1
Основная формула для поиска последней строки в такой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(1, 1).CurrentRegion.Rows.Count
Вариант 2
Ниже таблицы не должно быть никаких записей, в том числе ранее удаленных:
PosStr = ActiveSheet.UsedRange.Rows.Count
Вариант 3
В первом столбце таблицы не должно быть пропусков, а также в таблице должно быть не менее двух заполненных строк, включая строку заголовков:
PosStr = Cells(1, 1).End(xlDown).Row
Вариант 4
В первой колонке рабочего листа внутри таблицы не должно быть пропусков, а ниже таблицы в первой колонке не должно быть других заполненных ячеек:
PosStr = WorksheetFunction.CountA(Range("A:A"))
Вариант 5
Ниже таблицы не должно быть никаких записей:
PosStr = Cells.SpecialCells(xlLastCell).Row
Последняя строка любой таблицы
Последнюю заполненную строку для любой таблицы будем искать, отталкиваясь от ее верхней левой ячейки: Cells(a, b)
.
Вариант 1
Основная формула для поиска последней строки в любой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(a, b).CurrentRegion.Cells(Cells(a, b).CurrentRegion.Cells.Count).Row
Вариант 2
Дополнительная формула с условием, что в первом столбце таблицы нет пустых ячеек:
PosStr = Cells(a, b).End(xlDown).Row
Если у вас на рабочем листе Excel есть записи вне таблиц, следите за тем, чтобы таблицы были окружены пустыми ячейками или пустыми ячейками и границами листа. Тогда не будет случайно внесенных заметок, примыкающих к таблицам, которые могут отрицательно повлиять на точность вычисления номера последней строки из кода VBA.
К сожалению, во всех приведенных методах непонятно, учитывается ли фильтр? То есть учитываются ли скрытые ячейки?
Добрый день, Николай!
Скрытые строки в центре таблицы не влияют на результат. Если в скрытый диапазон входит последняя строка, результат будет зависеть от примененного выражения.
В зависимости от того, какой результат вам нужен при скрытой последней строке, выбирайте подходящее выражение с помощью следующего теста:
Евгений добрый день! Подскажите пожалуйста, как средствами VBA в уже заполненную таблицу с данными под каждой строкой добавлять ещё строки. Средствами Excel это делать долго, если таблица 10-20 заполненных строк, то это быстро ,но когда их 50 и более хорошо бы автоматизировать процесс. Спасибо.
Добрый день, Михаил!
Вы не пробовали использовать форму данных?
Эта строка работает, но не совсем понимаю как.
Привет, Евгений!
Давайте разберем строку
на следующем примере:
Выражение
Cells(3, 2).CurrentRegion
возвращает диапазонRange("B3:F6")
, тогдаВыражение
Range("B3:F6").Cells.Count
возвращает количество ячеек в диапазонеRange("B3:F6")
и равно 20. В результате получаемВыражение
Range("B3:F6").Cells(20)
возвращает ячейкуRange("F6")
, откуда следуетВ результате мы вычислили номер строки последней ячейки таблицы, который равен 6.
Это работает в «умных» таблицах.
Про поиск последнего столбца в документе есть что-нибудь подобное? Причем, в какой строке самая «широкая» таблица неизвестно.
Привет, Николай!
Номер последнего столбца можно найти так:
Но есть один нюанс: это последний столбец используемого диапазона, включающего в себя пустые столбцы, которые ранее содержали данные, но данные были очищены. Если из последних столбцов данные не удалялись, то все работает нормально.
Добрых суток!
Форматирование ячеек желательно тоже убирать вокруг таблицы. А не то CurrentRegion расширяет регион с их учётом (на ёкселе 2003 и 2010). У меня он срабатывал на заливку ячеек серым цветом.
при распечатывании списка бывает что 1-2 позиции переходят на новый лист.
В этом случае я вручную корректирую (уменьшаю)кол-во строк на листе
В результате на последний печатный (бумажный) лист выходит 5-7 позиций.
Как заставить макрос посчитать общее кол-во строк на странице ?
Среднее количество строк на печатной странице:
Обсуждение закрыто.