Найти в Дзене

Как найти последнюю занятую строку (или первую свободную строку) в Эксель?

Всем привет, меня зовут Андрей, это снова я.

Часто бывает так, что нужно вычислить номер последней занятой (или первой свободной) строки в Эксель.

Это можно сделать в виде отдельной программы (отдельного макроса), единственная цель этого макроса будет состоять в том, чтобы показать номер первой свободной строки. Вот этот макрос:

** ** **

Sub ПоследняяСтрока()

'Этап 1: Объявляем переменные

Dim LastRow, FreeRow As Long, max As Single

'Этап 2: Введем первоначальное значение MAX

max = 0

'Этап 3: Вычислим номер последней занятой строки в цикле

For k = 1 To 16384

If Cells(Rows.Count, k).End(xlUp).Row > max Then

max = Cells(Rows.Count, k).End(xlUp).Row

End If

Next k

'Этап 4: Прибавим к последней занятой строке единицу (получим FreeRow)

LastRow = max

FreeRow = LastRow + 1

'Этап 5: Покажем значение FreeRow

MsgBox (FreeRow)

End Sub

** ** **

Здесь LastRow - это номер последней занятой строки, а FreeRow - это номер первой свободной строки, он ровно на единицу больше, чем номер последней занятой строки.

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

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

Приведем пример.

Пусть есть какой-то фрагмент листа Эксель:

Фрагмент листа Эксель
Фрагмент листа Эксель

Тут мы четко видим, что на листе есть несколько пустых строк. Например, строки 568 и 579. Но самая последняя заполненная строка - это строка с номером 589, ниже ее ничего точно нет. Это значит, что значение переменной LastRow будет 589, а значение переменной FreeRow будет 590.

Это можно проверить, запустив наш макрос. Мы получим вот что:

-2

Но иногда бывает и так, что нужна не первая пустая строка вообще на листе, а первая пустая строка в каком-то конкретном столбце.

Пусть, например, это будет столбец с номером AAA.

Тогда текст макроса будет другим:

** **

Sub ПоследняяСтрока_2()

'Этап 1: Объявляем переменные

Dim LastRow, FreeRow As Long, max As Long

'Этап 2: Запрашиваем номер столбца

a = InputBox("Введите буквенный код столбца")

k = Range(a & 1).Column

If Cells(Rows.Count, k).End(xlUp).Row > max Then

max = Cells(Rows.Count, k).End(xlUp).Row

End If

'Этап 3: Прибавим к последней занятой строке единицу (получим FreeRow)

LastRow = max

FreeRow = LastRow + 1

'Этап 4: Покажем значение FreeRow

MsgBox (FreeRow)

End Sub

** **

А вот результат действия этого макроса для столбца AAA:

-3

Итак, в столбце AAA в строке 13 и ниже нее ничего нет.

А на этом пока всё, всем пока, и до новых встреч!