альтернативный вариант без использования CountA()
является следующее:
Function firstrow2(col As Range) As Long
Dim f As Range
Set f = col.Find("*", after:=col.Cells(col.Parent.Rows.Count)) '<--| look for any value in given column from its row 1 (included) downwards
If Not f Is Nothing Then firstrow2 = f.Row '<--| if found then return its row index
End Function
который возвращается 0
, если нет данных в пройденной колонке
Вы должны сделать это немного более прочным и обработать неправильный пройденный диапазон (не весь столбец или более широкий, чем столбец), вы можете использовать следующее:
Function FirstRow(col As Range) As Long
Dim f As Range
With col.Columns(1).EntireColumn
Set f = .Find("*", after:=.Cells(.Rows.Count)) '<--| look for any value from row 1 (included)
End With
If Not f Is Nothing Then FirstRow4 = f.Row '<--| if found then return its row index
End Function
'firstRowIndex = .Cells (1," A "). End (xlDown) .row' и обрабатывать строку возможностей 1 содержит данные –