如何使用将条件作为字符串文字一部分的 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)

您必须使用额外的列可能是一个小缺点。但从好的方面来说,它很容易理解(对你自己和可能阅读你代码的其他人来说)。