Если это действительно должно быть в VBA - и я могу думать о различных ситуациях, когда это произойдет - тогда вы можете использовать Range.SpecialCells(xlCellTypeVisible)
, чтобы получить только Ячейки, которые являются видимыми- например,
Dim Col_Dessert As Long, Col_Snack As Long
Dim i As Long
Dim rowCheck As Range, wsCheck As Worksheet
Col_Dessert = 5
Col_Snack = 6
i = 0
Set wsCheck = Worksheets("JIS")
For Each rowCheck In Intersect(wsCheck.AutoFilter.Range.Columns(1), wsCheck.AutoFilter.Range.SpecialCells(xlCellTypeVisible)).Cells
If wsCheck.Cells(rowCheck.Row, Col_Dessert).Value = "L" And wsCheck.Cells(rowCheck.Row, Col_Dessert).Value = "WESTERN" Then
i = i + 1
End If
Next rowCheck
Set wsCheck = Nothing
Однако, если вы пытаетесь создать пользовательскую функцию для этого на рабочем листе, рассмотрите SUMPRODUCT
с SUBTOTAL(103
(то есть COUNTA
, игнорируя скрытые строки).Базовая форма:
=SUMPRODUCT(--(ConditionRange1="Value1")*--(ConditionRange2="Value2")*--SUBTOTAL(103,OFFSET($A$1,ROW(ConditionRange1)-1,0)))
Адаптировано для вас, чтобы соответствовать "L"
в столбце E и "WESTERN"
в столбце F:
=SUMPRODUCT(--($E$1:$E$100="L")*--($F$1:$F$100="WESTERN")*--SUBTOTAL(103,OFFSET($A$1,ROW($A$1:$A$100)-1,0)))