如何使用将条件作为字符串文字一部分的 countif 函数?
how to use countif function having the criteria as a part of string literal?
例如,我想计算出现在 A 列中的 "johns" 的数量,但是该列同时具有名字和姓氏,我想计算所有约翰,而不考虑他们的姓氏。
我正在使用以下代码,但似乎不起作用:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))
您不需要 VBA。您可以在 COUNTIF/COUNTIFS 中使用通配符 - 使您的条件 "John*"(因此,=COUNTIF(A1:A7, "John*")
)。
正如@YowE3K 评论的那样,我使用 "=" & "John*")
是有原因的。这是为将来使用变量而不是硬编码的 "John".
做准备
如果您想使用 VBA 解决方案,您可以使用:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & "John*")
或者,更好的是:
Const NametoFind As String = "John"
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & NametoFind & "*")
注意:Range("A1", Range("A1").End(xlDown))
仅适用于连续范围(如果范围中间有空白单元格则不行)。
如果您被允许使用额外的列,请在您命名列之后使用以下公式立即创建一个:
=ISNUMBER(SEARCH("JOHN"; A1)
上面的例子应该在单元格 B1
中。然后,如果 A 列中的单元格包含名称 "JOHN",您将得到一个 TRUE
,否则您将得到一个 FALSE
。然后你简单地数一下:
=COUNTIF(B:B; TRUE)
您必须使用额外的列可能是一个小缺点。但从好的方面来说,它很容易理解(对你自己和可能阅读你代码的其他人来说)。
例如,我想计算出现在 A 列中的 "johns" 的数量,但是该列同时具有名字和姓氏,我想计算所有约翰,而不考虑他们的姓氏。
我正在使用以下代码,但似乎不起作用:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))
您不需要 VBA。您可以在 COUNTIF/COUNTIFS 中使用通配符 - 使您的条件 "John*"(因此,=COUNTIF(A1:A7, "John*")
)。
正如@YowE3K 评论的那样,我使用 "=" & "John*")
是有原因的。这是为将来使用变量而不是硬编码的 "John".
如果您想使用 VBA 解决方案,您可以使用:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & "John*")
或者,更好的是:
Const NametoFind As String = "John"
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), "=" & NametoFind & "*")
注意:Range("A1", Range("A1").End(xlDown))
仅适用于连续范围(如果范围中间有空白单元格则不行)。
如果您被允许使用额外的列,请在您命名列之后使用以下公式立即创建一个:
=ISNUMBER(SEARCH("JOHN"; A1)
上面的例子应该在单元格 B1
中。然后,如果 A 列中的单元格包含名称 "JOHN",您将得到一个 TRUE
,否则您将得到一个 FALSE
。然后你简单地数一下:
=COUNTIF(B:B; TRUE)
您必须使用额外的列可能是一个小缺点。但从好的方面来说,它很容易理解(对你自己和可能阅读你代码的其他人来说)。