【问题标题】:Countifs VBA to count non blank cellsCountifs VBA 计算非空白单元格
【发布时间】:2016-03-01 01:42:03
【问题描述】:

我有以下 VBA 公式来计算一个范围内的非空白单元格,以及其他范围内的一些其他条件。计算非空白单元格的部分不起作用。这是一段代码:

LAX(0) = Application.WorksheetFunction.CountIfs(Range("I:I"), "<>""", Range("AH:AH"), "LAX", Range("AG:AG"), ">=" & semanaI, Range("AG:AG"), "<=" & semanaF)

前两个参数正确吗?

【问题讨论】:

  • 从 Excel 2007 开始就有一个称为 COUNTBLANK 的函数。这有什么帮助吗? support.office.com/en-us/article/…
  • 不,因为这不是唯一需要满足的条件
  • 显然COUNTIF函数支持通配符:support.office.com/en-gb/article/…网站上还有一个例子可以让你Counts the number of cells containing any text[...]。为确保单元格中至少有一个字符,您甚至可以查找以下通配符组合:*?*

标签: vba excel


【解决方案1】:

我通过这样做解决了它:

LAX(0) = Application.WorksheetFunction.CountIfs(Range("I:I"), "<>" & "", Range("AH:AH"), "LAX", Range("AG:AG"), ">=" & semanaI, Range("AG:AG"), "<=" & semanaF)

【讨论】:

    【解决方案2】:

    不幸的是,您需要对条件进行更多处理,因为如果任何参数中的单元格是空单元格,CountIfs 会将其视为 0 值。

    (参考,兄弟:https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheetfunction.countifs.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

    所以,

    Application.WorksheetFunction.CountIfs( {评估条件的范围}, {criteria_1} ,{criteria_2},...)

    这样做:

    Dim rCell as Range.Cells
    Dim rRange as range
    
    Set rRange = Range("I:I")
    
    For Each rCell in rRange
    
        If { foo } Then
            'do stuff
        Elif { bar} 
            'do stuff
        Else { derp}
            'do stuff
        End If
    
    Debug.Print rCell.Address, rCell.Value
    
    Next rCell
    

    【讨论】: