Для подсчета строк, которые видны после применения фильтра, вам необходимо сделать следующее:
Sub countNonFiltered()
Dim sht As Worksheet
Dim colIndex As Long
Dim firstrow As Long
Dim RowCount As Long
Set sht = ThisWorkbook.Worksheets("worksheet name")
colIndex = 1 'let's assume you're interested in column A
firstrow = 2 'Let's assume your header is in row 1 and the data starts from row 2
With sht
RowCount = .Range(.Cells(Rows.Count, 1).End(xlUp), .Cells(firstrow, colIndex)).SpecialCells(xlCellTypeVisible).Count
Debug.Print RowCount
End With
End Sub
В демонстрационных целях приведенный выше код выводит количество видимых строк в ближайшем окне.
Имейте в виду, что это:
Cells(Rows.Count, colIndex).End(xlUp)
- это диапазон, состоящий только из одной ячейки. Вместо этого вам нужен диапазон, состоящий из всех ячеек, принадлежащих строкам, которые все еще видны после применения фильтра.
Также имейте в виду, что когда вы используете переменные, которые содержат индексы строк или столбцов, они должны быть объявлены как Long
.