Попробуйте это:
Public Function IdentifyLastRowInBlock() As Long
With Sheet1
Dim lastRow As Long
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
Dim blankRow As Long
blankRow = .Range(.Cells(3, 1), .Cells(lastRow, 1)).End(xlDown).Row + 1
End With
IdentifyLastRowInBlock = blankRow
End Function
Обратите внимание, что это вернет последнюю неиспользованную строку, начиная со строки 3. Не зная вашего кода, я просто жестко запрограммировал начальную точку - вам придется изменить это в соответствии с вашими обстоятельствами. На самом деле я бы рекомендовал сделать это параметром для функции, чтобы в будущем он был более гибким. Это также жестко запрограммировано для просмотра в столбце 1 ("A"), который также можно сделать параметром.
Также обратите внимание, что если в столбце 1 таблица окажется "полной", она найдет первую строку после таблицы. Отличная особенность таблиц заключается в том, что они автоматически расширяются, поэтому, если вы поместите значение в первую строку после существующей таблицы, Excel раскроет таблицу за вас.