Всем привет, меня зовут Андрей, это снова я.
Часто бывает так, что нужно вычислить номер последней занятой (или первой свободной) строки в Эксель.
Это можно сделать в виде отдельной программы (отдельного макроса), единственная цель этого макроса будет состоять в том, чтобы показать номер первой свободной строки. Вот этот макрос:
** ** **
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.
Это можно проверить, запустив наш макрос. Мы получим вот что:
Но иногда бывает и так, что нужна не первая пустая строка вообще на листе, а первая пустая строка в каком-то конкретном столбце.
Пусть, например, это будет столбец с номером 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:
Итак, в столбце AAA в строке 13 и ниже нее ничего нет.
А на этом пока всё, всем пока, и до новых встреч!