David需要计算出现在一系列单元格中的星号数量。他指出COUNTIF似乎假设*是通配符,因此不会返回正确的计数。

根据您实际想要得到的结果,有很多方法可以得到结果。假设您在单元格A3:A8中具有以下值:

1234 abcd abcd abcd

在这六个单元格中,总共有七个星号。要确定出现在该范围内的星号数量,您将需要依赖于以下数组公式:

=SUM(LEN(A3:A8)-LEN(SUBSTITUTE(A3:A8,"*","")))

请记住使用Ctrl + Shift + Enter输入公式。

当然,您可能希望计算包含单个星号的范围内的单元格数目,而不是实际的星号数目。在这种情况下,只要您知道如何将公式组合在一起,就可以实际使用COUNTIF函数。首先,尝试以下公式:

=COUNTIF(A3:A8,"*")

根据本技巧开头显示的数据,此公式将返回值5。这当然是错误的。返回此结果的原因是因为COUNTIF使用*作为通配符,表示“单元格中的任何文本”。由于该范围内有五个单元格包含文本(非数字值),因此这是公式返回的答案。

您可能会认为,如果搜索星号的ANSI字符而不是星号本身,则可以获得正确的结果。此公式显示了这种方法:

=COUNTIF(A3:A8,CHAR(42))

该公式还返回错误的答案(5)。看起来Excel在应用程序中发现*和搜索CHAR(42)之间没有区别。两者仍被视为通配符。

解决此问题的方法是记住,可以通过以下方式强制Excel将星号视为实际字符:在其前面加上代字号字符:

=COUNTIF(A3:A8,"~*")

这将返回结果1,这可能令人惊讶。但是,Excel的字面意义非常大,您的公式要求对包含单个星号的所有单元格进行计数。正确的答案是只有一个单元格(A7)包含您要的内容。如果要计算单元格中任何位置包含星号的所有单元格,则需要用通配符将公式括起来,方法是:

=COUNTIF(A3:A8,"~*")

这将返回“任何文本”,后跟文字星号,后跟“任何文本”。结果为4,这是包含至少一个星号的单元格数。

此知识库文章介绍了使用波浪号来抵消通配符的概念:

https://support.office.com/en-us/article/find-or-replace-text-and-numbers-on-a-worksheet-0e304ca5-ecef-4808-b90f-fdb42f892e90

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9483)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: