如何在VBA中使用Countifs公式?

时间:2015-09-01 12:58:17

标签: excel vba excel-vba loops countif

我正在制作一本有8个工作表的工作簿。 工作表的名称:

  

[层次结构,胜利,展望,个性化,失败,失败,回溯,登录]。

在“层次结构”工作表中,我想在B列中应用公式,直到该列B的最后一个值(包括销售人员的姓名) 。 (我想我们会使用循环,我不确定应该使用哪个循环。)

=COUNTIFS(wins!$AL:$AL,Hierarchy!$B4,wins!$P:$P,"Complete")

PS :我在上面的countif公式和循环(在VBA中)需要帮助才能使用该公式到列中的最后一条记录。

1 个答案:

答案 0 :(得分:1)

如果您只需要一个结果而不是在工作表中的列中填充公式,则可以使用以下选项之一:

快速 - 仅使用循环:

Sub countifs_in_vba()

Dim Result As Long
Dim i As Long
Dim cell As Range
Dim wsHierarchy As Worksheet
Dim wsWins As Worksheet
Set wsHierarchy = ThisWorkbook.Sheets("Hierarchy")
Set wsWins = ThisWorkbook.Sheets("wins")

For Each cell In Intersect(wsHierarchy.Range("B:B"), wsHierarchy.UsedRange)
    For i = 1 To wsWins.Cells.SpecialCells(xlCellTypeLastCell).Row
        If cell.Value = wsWins.Cells(i, "AL").Value And wsWins.Cells(i, "P").Value = "Complete" Then
            Result = Result + 1
        End If
    Next
Next
MsgBox Result

End Sub

较慢 - 使用Application.WorksheetFunction

Sub countifs_in_vba2()

Dim Result As Long
Dim cell As Range
Dim wsHierarchy As Worksheet
Dim wsWins As Worksheet
Set wsHierarchy = ThisWorkbook.Sheets("Hierarchy")
Set wsWins = ThisWorkbook.Sheets("wins")

For Each cell In Intersect(wsHierarchy.Range("B:B"), wsHierarchy.UsedRange)
    Result = Result + Application.WorksheetFunction.CountIfs(wsWins.Range("AL:AL"), cell.Value, wsWins.Range("P:P"), "Complete")
Next
MsgBox Result

End Sub