VBA:CountIfS函数来计算多个工作表中的单元格值是多less倍如果另一个单元格值

我对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 

结束function

但是我想使用CountIfS函数来计算单元格值在多个工作表中是多less次如果另一个单元格值(也是多个也是是

我试过了:

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

但它不起作用

但:

 =myCountIf(I8,"Yes") 

工作正常

它可能非常简单,如果是的话,我很抱歉

尝试下面的修改的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工作表的单元格中调用它,请不要使用regular =myCountIf(AND(I8="Yes",I7="Yes"))而是使用下面的代码行:

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

在下面的屏幕截图中,例如在Excel中使用此UDF ,所有工作表在单元格I7和I8中都有“YES”,但工作表名称中有一个是“Note”,因此结果为2(而不是3)。

在这里输入图像说明

这是一个小改变,给你两个过滤标准:

 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