VBA:CountIfS 函数用于计算单元格值在多个工作表中为“是”的次数 IF 另一个单元格值

VBA: CountIfS function to count how many times a cell value is Yes across multiple worksheets IF another cell value

我是 VBA(本周)的新手,我正在使用代码

Function myCountIf(rng As Range, criteria) As Long
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Summary-Sheet" And ws.Name <> "Notes" And ws.Name <> "Results" Then
        myCountIf = myCountIf + WorksheetFunction.CountIf(ws.Range(rng.Address), criteria)
    End If
Next ws

结束函数

但我想使用 CountIfS 函数来计算一个单元格值在多个工作表中为 Yes 的次数 IF 另一个单元格值(也跨多个工作表也是 Yes

我试过:

=myCountIf(AND(I8="Yes",I7="Yes"))

但是没用

但是:

=myCountIf(I8,"Yes")

工作正常

它可能非常简单,如果是这样,我很抱歉

这是一个小改动,为您提供了两个过滤条件:

Function myCountIfs(rng1 As Range, criteria1, rng2 As Range, criteria2) As Long
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Summary-Sheet" And ws.Name <> "Notes" And ws.Name <> "Results" Then
        myCountIfs = myCountIfs + WorksheetFunction.CountIfs(ws.Range(rng1.Address), criteria1, ws.Range(rng2.Address), criteria2)
    End If
Next ws

试试下面修改后的 UDF

Option Explicit

Function myCountIfs(Rng1 As Range, Criteria1 As String, Rng2 As Range, Criteria2 As String) As Long

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

    Select Case ws.Name
        Case "Summary-Sheet", "Notes", "Results"
            ' do nothing

        Case Else
             myCountIfs = myCountIfs + Application.CountIfs(ws.Range(Rng1.Address), Criteria1, ws.Range(Rng2.Address), Criteria2)

    End Select
Next ws

End Function

但是,为了从 Excel sheet 的单元格中调用它,请不要使用常规的 =myCountIf(AND(I8="Yes",I7="Yes")),而是使用下面的行:

=myCountIfs(I8,"Yes",I7,"Yes")

请参阅下面的屏幕截图,了解在 Excel 中使用此 UDF 的示例,所有 sheets 在单元格 I7 中都有 "YES" 和I8,但是 sheet 的其中一个名字是 "Note",因此结果是 2(而不是 3)。