例如,我想计算" johns"的数量。出现在列A中但是列有名字和姓氏,我想计算所有约翰,而不管他们的姓氏。
我正在使用以下代码,但似乎无法正常工作:
Range("A199").Value = WorksheetFunction.CountIf(Range("A1", Range("A1").End(xlDown)), Cells.Find(What:="John "))
答案 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)
您必须使用额外的列可能有点不利。但从好的方面来说,这是非常容易理解的(无论是对你自己还是其他可能阅读你代码的人)。