Если вы хотите вернуть объект Range с использованием динамического определения конечной строки, вам необходимо указать возвращаемую функцию как объект Range и передать переменную начальной строки и номер столбца, которые необходимо использовать, в дополнение к использованию метода последней строки.
Option Explicit
Public Sub test()
Dim ws As Worksheet, rng As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set rng = GetRange(ws, 1, 1)
Debug.Print rng.Address
End Sub
Public Function GetRange(ByVal ws As Worksheet, ByVal startRow As Long, ByVal columnNumber As Long) As Range
With ws
Set GetRange = Range(.Cells(startRow, columnNumber), .Cells(.Cells(.Rows.Count, columnNumber).End(xlUp).Row, columnNumber))
End With
End Function
Возможно, вам нужна некоторая обработка ошибок / проверка того, что определенная конечная строка не меньше startRow
, например. с lastRow
как 3 и startRow
= 4
Option Explicit
Public Sub test()
Dim ws As Worksheet, rng As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set rng = GetRange(ws, 4, 1)
If Not rng Is Nothing Then Debug.Print rng.Address
End Sub
Public Function GetRange(ByVal ws As Worksheet, ByVal startRow As Long, ByVal columnNumber As Long) As Range
Dim lastRow As Long
With ws
lastRow = .Cells(.Rows.Count, columnNumber).End(xlUp).Row
If Not lastRow < startRow Then
Set GetRange = .Range(.Cells(startRow, columnNumber), .Cells(lastRow, columnNumber))
End If
End With
End Function