Это должно сделать работу. Пожалуйста, попробуйте.
Function myCountIfSheet1(Rng As Range, _
Clm1 As Long, _
Crit1 As Variant, _
Clm2 As Long, _
Crit2 As Variant) As Long
' 011
Dim Fun As Long ' function return value
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
With Ws
If .Name Like "Sheet1*" Then
Fun = Fun + WorksheetFunction.CountIfs( _
.Range(Rng.Columns(Clm1).Address), Crit1, _
.Range(Rng.Columns(Clm2).Address), Crit2)
End If
End With
Next Ws
myCountIfSheet1 = Fun
End Function
Для простоты вызова я структурировал вызов функции так, чтобы обеспечить только один диапазон адресов. В своих тестах я использовал A1: D30. Столбец (A) содержал один критерий, а столбец (D) - другой. Конечно, столбец (A) - это первый столбец - Столбцы (1) - диапазона, а столбец D - Столбцы (4) диапазона. Таким образом, следующий вызов функции будет искать «3» в столбце A и «красный» в столбце D.
Debug.Print myCountIfSheet1(Range("A1:D30"), 4, "red", 1, 3)
Последовательность критериев не имеет значения. Вы также можете добавить больше критериев, используя ту же структуру.