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)。
我是 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)。