如何使用标准作为字符串文字的一部分的countif函数?

时间:2017-04-19 07:25:16

标签: excel vba excel-vba worksheet-function

例如,我想计算" johns"的数量。出现在列A中但是列有名字和姓氏,我想计算所有约翰,而不管他们的姓氏。

我正在使用以下代码,但似乎无法正常工作:

Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))

3 个答案:

答案 0 :(得分:3)

您不需要VBA。您可以在COUNTIF / COUNTIFS中使用通配符 - 将您的条件设为“John *”(所以,=COUNTIF(A1:A7, "John*"))。

答案 1 :(得分:1)

正如@ 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))仅适用于连续范围(如果您的中间范围内有空白单元格,则不会)。

答案 2 :(得分:0)

如果允许使用额外的列,请在命名列后立即使用以下公式创建一列:

=ISNUMBER(SEARCH("JOHN"; A1)

以上示例应位于单元格B1中。然后,如果A列中的单元格包含名称“JOHN”,您将获得TRUE,否则您将获得FALSE。然后你只需要计算:

=COUNTIF(B:B; TRUE)

您必须使用额外的列可能有点不利。但从好的方面来说,这是非常容易理解的(无论是对你自己还是其他可能阅读你代码的人)。