【问题标题】:How to use Countifs formula in VBA?如何在 VBA 中使用 Countifs 公式?
【发布时间】:2015-09-03 22:19:24
【问题描述】:

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

[层次结构、胜利、前景、pcv、未命中、失败、回溯、登录]。

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

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

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

【问题讨论】:

  • 给定的公式应该在哪个单元格中?很难理解,因为您说的是 B 列,但是在同一个公式中有一个标准是指单元格 B4 - 同一列!乍一看,这没有任何意义。还是你真的不想把公式放在任何单元格中,你只需要得到结果?
  • 您是否只想将公式应用到 B 列,直到特定列的数据行中的最后一个单元格?如果是这样,则无需循环。您可以使用.FillDown 方法或.AutoFill 方法。您可能还想获取所需列的 Last Used Rows。请参阅此以获得帮助,因为对此有一些警告:rondebruin.nl/win/s9/win005.htm

标签: vba excel loops countif


【解决方案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

【讨论】:

  • 如果可以解决您的问题,请勾选 ✓ 符号来接受答案。如果不是,请详细说明。
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多