Принимая во внимание все возможные схемы размещения данных, как внутри, так и за пределами диапазона интересов, необходимо учитывать ряд факторов
- Как правило, интересующий диапазон может быть любого размера в любом месте листа
- Могут быть данные, смежные с диапазоном интереса, выше или ниже
- Диапазон интересов может быть совершенно пустым
- Требуется ли "Номер последней строки" относительно диапазона интересов или листа
- Примечание: этот код обрабатывает ячейки, содержащие пустую строку, как содержащие данные
Function RangeLastRow(r As Range, _
Optional Col = 1, _
Optional RelativeToSheet As Boolean = False) As Long
Dim rw As Long
With r.Cells(r.Rows.Count, Col)
If IsEmpty(.Value2) Then
rw = .End(xlUp).Row
If rw < r.Row Then
rw = r.Row
End If
Else
rw = r.Row + r.Rows.Count - 1
End If
End With
If IsEmpty(r.Cells(rw - r.Row + 1, Col)) Then
' range is empty
rw = 0
Else
If Not RelativeToSheet Then
rw = rw - r.Row + 1
End If
End If
RangeLastRow = rw
End Function
Используйте его как UDF на листе или в VBA, как это
Sub Demo()
Using default Column 1 and Relative to Sheet
MsgBox RangeLastRow(Worksheets("MyWorksheet").Range("A1:A200"))
End Sub