Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Номер последней заполненной строки

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

    Номер последней заполненной строки в таблице Excel обычно используется в коде VBA для определения следующей за ней первой пустой строки для добавления новой записи. А также для задания интервала для поиска и обработки информации с помощью цикла For… Next (указание границ обрабатываемого диапазона).

    Переменную, которой присваивается номер последней строки, следует объявлять как Long или Variant, например: Dim PosStr As Long. В современных версиях Excel количество строк на рабочем листе превышает максимальное значение типа данных Integer.

    Таблица в верхнем левом углу

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

    Пример таблицы с набором данных в Excel
    Пример таблицы с набором данных в 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 по тематическим разделам со ссылками на все статьи.

    12 комментариев для “VBA Excel. Номер последней заполненной строки”

    1. Николай Зубов

      К сожалению, во всех приведенных методах непонятно, учитывается ли фильтр? То есть учитываются ли скрытые ячейки?

      1. Евгений

        Добрый день, Николай!
        Скрытые строки в центре таблицы не влияют на результат. Если в скрытый диапазон входит последняя строка, результат будет зависеть от примененного выражения.

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

    2. Евгений добрый день! Подскажите пожалуйста, как средствами VBA в уже заполненную таблицу с данными под каждой строкой добавлять ещё строки. Средствами Excel это делать долго, если таблица 10-20 заполненных строк, то это быстро ,но когда их 50 и более хорошо бы автоматизировать процесс. Спасибо.

    3. Евгений

      Эта строка работает, но не совсем понимаю как.

      1. Евгений

        Привет, Евгений!
        Давайте разберем строку

        на следующем примере:

        Выражение Cells(3, 2).CurrentRegion возвращает диапазон Range("B3:F6"), тогда

        Выражение Range("B3:F6").Cells.Count возвращает количество ячеек в диапазоне Range("B3:F6") и равно 20. В результате получаем

        Выражение Range("B3:F6").Cells(20) возвращает ячейку Range("F6"), откуда следует

        В результате мы вычислили номер строки последней ячейки таблицы, который равен 6.

    4. Станислав

      Это работает в «умных» таблицах.

    5. Николай

      Про поиск последнего столбца в документе есть что-нибудь подобное? Причем, в какой строке самая «широкая» таблица неизвестно.

      1. Евгений

        Привет, Николай!
        Номер последнего столбца можно найти так:

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

    6. Добрых суток!
      Форматирование ячеек желательно тоже убирать вокруг таблицы. А не то CurrentRegion расширяет регион с их учётом (на ёкселе 2003 и 2010). У меня он срабатывал на заливку ячеек серым цветом.

    7. при распечатывании списка бывает что 1-2 позиции переходят на новый лист.
      В этом случае я вручную корректирую (уменьшаю)кол-во строк на листе
      В результате на последний печатный (бумажный) лист выходит 5-7 позиций.
      Как заставить макрос посчитать общее кол-во строк на странице ?

      1. Евгений

        Среднее количество строк на печатной странице:

    Обсуждение закрыто.