【问题标题】:CountIf() Function From VBAVBA 中的 CountIf() 函数
【发布时间】:2017-03-23 01:46:34
【问题描述】:

我试图从我的 VBA 语法中使用 CountIf() 函数,但我得到一个错误

参数数量错误或属性分配无效

这是我的语法 - 我需要更改什么才能成功?

Dim countofemps As Integer

Sheets("All emps").Select
Selection.AutoFilter
ActiveSheet.ListObjects("Allemps").Range.AutoFilter Field:=1, Criteria1:=filtervalue
ActiveSheet.ListObjects("Allemps").Range.AutoFilter Field:=5, _
    Criteria1:=">=1/29/2017", Operator:=xlAnd, Criteria2:="<=3/1/2017"
'This line throws error
countofemps = WorksheetFunction.CountIf(Range("'All emps'!A2:A2000"), filtervalue, Range("'All emps'!B2:B2000"))

【问题讨论】:

  • Countif 接受两个参数。您可能想使用SumIf
  • 但我不想对这些值求和,我只想计算有多少符合条件
  • 好的,但是为什么需要第三个参数呢?
  • 我需要获取 C 列中所有值的计数,其中 A 列与变量 filtervalue 匹配
  • @IcyPopTarts - 这与“A 列与变量过滤器值匹配的计数”不一样吗?如果要排除 C 列中的空白,请使用 WorksheetFunction.CountIfs(Range("'All emps'!A2:A2000"), filtervalue, Range("'All emps'!C2:C2000"), "&lt;&gt;")。注意 countIFS,而不是 countIF。

标签: vba excel excel-2013 worksheet-function


【解决方案1】:

我会这样做:

With Sheets("All emps") '<--| reference your sheet
    With .ListObjects("Allemps").Range '<--| reference its "Allemps" table range
        .AutoFilter '<--| clear any previous filter
        .AutoFilter Field:=1, Criteria1:=filtervalue '<--| filter referenced range on its first column with given filtervalue
        .AutoFilter Field:=5, Criteria1:=">=1/29/2017", Operator:=xlAnd, Criteria2:="<=3/1/2017" '<--| filter reference range on its fifth column with given limit dates
        countofemps = Application.WorksheetFunction.Subtotal(103, .Columns(1)) -1  '<--| count the number of filtered cells on its first column except header cellr
    End With
End With

【讨论】:

    【解决方案2】:

    我猜你想要的是CountIfs,第二个参数列的条件是“非空”:

    由于您还想过滤 column 5 上的日期,您可以将所有条件集成到 countifs 函数中(无需过滤),如下所示:

    With Sheets("All emps").ListObjects("Allemps").DataBodyRange
        countofemps = WorksheetFunction.CountIfs( _
            .Columns(5),  ">=1/29/2017", _
            .Columns(5), "<=3/1/2017", _
            .Columns(1), filtervalue, _
            .Columns(3), "<>")
    End With
    

    【讨论】:

    • 那每次都返回 0?
    • @IcyPopTarts 不在我的测试中。请检查您的数据,您的匹配项可能为零。我猜对了你至少想达到什么目标?
    • @IcyPopTarts 刚刚注意到,在您的评论中,您希望排除 C 列中的空白,但您的 OP 代码引用了 C 列。这是误导。如果是列C,请尝试编辑后的代码。
    • 这是计算所有单元格,而不仅仅是从我的过滤条件中可见的单元格。 (A列与变量filtervalue匹配的所有单元格)
    • @A.S.H 你需要添加另一个 Range 和 Set 它只到那个 Range 的 SpecialCells(... ,然后在 CountIfs 中使用那个 Range
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多