【问题标题】:worksheetfunction.countifs is giving an error in VBA code when counting non-blank cells计算非空白单元格时,worksheetfunction.countifs 在 VBA 代码中出现错误
【发布时间】:2015-12-01 20:32:11
【问题描述】:

我有

Dim tape, out As Worksheet
Set tape = ThisWorkbook.Sheets("Agg")
Set out = ThisWorkbook.Sheets("output")

out.Cells(1, 2).Value = WorksheetFunction.CountIfs(tape.Range("IG1:IG10000"), "<>" & "", "<>" & " ", "<>" & "  ")

所以通常我说的是“如果它不是空白,不是单个空格,不是两个空格,则计数”。我要做的是计算非空白值,同时考虑到单元格中可能存在空格。但是最后一行一直给我这个错误:“无法获取工作表函数类的 Countifs 属性”。我怎样才能让它工作?谢谢!

【问题讨论】:

  • worksheetfunction之前添加application.
  • 我认为您以错误的方式使用了 countifs..countifs(range,criteria,range2,criteria2,...) 但您使用了 countifs(range,criteria1,criteria2,criteria3,... )

标签: vba excel worksheet-function countif


【解决方案1】:

也许可以试试

out.Cells(1, 2).Value = tape.Evaluate("=SUM(IF(TRIM(IG1:IG10000)<>"""",1,0))") 

这将忽略任何只有空格的单元格。

【讨论】:

    【解决方案2】:

    Countifs(..) 作为一组 AND 语句,而不是 OR 语句 - 例如如果您有姓/名/性别,则代码 =COUNTIF(A:A,"Smith",C:C,"Female") 将计算史密斯家族中的女性。 (您还必须分别指定每一列)

    我可以提供的两个解决方案是 A) 有一个宏,可以将 TRIM 应用于 UsedRange 和 IG 列相交处的每个单元格,以使开始/结束处的所有空格都消失(如果 LEN 则可能清除单元格是 0?) 或 B) 使用 COUNTA 得到非空白,然后减去其他条件:

    Dim tape AS Worksheet, out As Worksheet, rTEMP as Range
    Set tape = ThisWorkbook.Sheets("Agg")
    Set out = ThisWorkbook.Sheets("output")
    
    Set rTEMP = tape.Range("IG1:IG10000") 'Any specific reason for not just using the whole column IG:IG?
    
    out.Cells(1, 2).Value = WorksheetFunction.CountA(rTEMP) - (WorksheetFunction.CountIfs(rTEMP,"<>",rTEMP,"""")+WorksheetFunction.CountIf(rTEMP," ")+WorksheetFunction.CountIf(rTEMP,"  ")) 'count of Non-blank cells minus the sum of counts for Non-blank 0-length, non-blank 1-space and non-blank 2-spaces
    
    Set rTEMP = Nothing
    

    (检查非空白的 0 长度单元格是一个额外的特殊情况,因此它使用 CountIf)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多