如何使用具有条件的countif函数作为string文字的一部分?

例如,我想要计算出现在列A中的“johns”的数量,但是列中有名字和姓氏,我想统计所有的johns而不考虑他们的姓。

我正在使用下面的代码,但似乎并没有工作:

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

正如@ YowE3K所评论的那样,我使用"=" & "John*")是有原因的。 这是为将来使用variables而不是硬编码的“John”做准备。

如果您想使用VBA解决scheme,则可以使用:

 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))只适用于连续范围(如果空白单元格在范围中间,则不适用)。

你不需要VBA。 您可以使用COUNTIF / COUNTIFS的通配符 – 使您的标准为“John *”(so, =COUNTIF(A1:A7, "John*") )。

如果允许使用额外的列,请在命名列后使用下列公式:

 =ISNUMBER(SEARCH("JOHN"; A1) 

上面的例子应该在B1单元格中。 然后,如果列A中的单元格包含名称“JOHN”,则会得到FALSE ,否则您将得到一个FALSE 。 那么你只需要数一下:

 =COUNTIF(B:B; TRUE) 

这可能是一个轻微的缺点,你必须使用一个额外的列。 但是从正面来看,这是非常可以理解的(对于你自己和其他可能读你的代码的人)。