Как найти последнюю заполненную строку в Excel VBA

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

Короткий ответ: для конкретного столбца обычно достаточно Cells(Rows.Count, "A").End(xlUp).Row. Важно явно указать лист, иначе код проверит активный лист.

Последняя строка в заданном столбце

Dim ws As Worksheet
Dim lastRow As Long

Set ws = ThisWorkbook.Worksheets("Данные")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Код начинает с нижней ячейки столбца A и поднимается до первого непустого значения. Внутренние пропуски не мешают.

Правильно обработать пустой столбец

На полностью пустом столбце метод вернёт 1. Поэтому добавьте проверку:

If Application.WorksheetFunction.CountA(ws.Columns("A")) = 0 Then
    lastRow = 0
Else
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
End If

Последняя используемая строка на всём листе

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

Dim lastCell As Range
Set lastCell = ws.Cells.Find(What:="*", After:=ws.Range("A1"), _
    LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious, MatchCase:=False)

lastRow = IIf(lastCell Is Nothing, 0, lastCell.Row)

LookIn:=xlFormulas учитывает ячейки с формулами, даже если они показывают пустую строку.

Пример обработки диапазона

Dim r As Long
For r = 2 To lastRow
    If Len(ws.Cells(r, "A").Value2) > 0 Then
        ws.Cells(r, "B").Value = UCase$(CStr(ws.Cells(r, "A").Value))
    End If
Next r

Почему не стоит полагаться на UsedRange

UsedRange иногда сохраняет строки, где раньше были данные или форматирование. Для бизнес-логики надёжнее выбрать обязательный столбец либо использовать Find.

Проверка макроса

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

Нужно автоматизировать похожую задачу?

Пришлите пример Excel или Word и описание результата — оценю подходящий вариант.