我有一张表格,我想计算某个字符串在某一列中出现的次数。我以前也COUNTIF
这样做过,但我想在计数中排除那些以任意数字结尾的字符串的单元格。
我尝试使用这个公式,但标准无法识别,因为它总是错误地给出 0 值:
=COUNTIF([Name],"*"&A3&NOT(ISNUMBER(VALUE(RIGHT("*")))))
编辑:
Area 25
下面的截图显示我想计算在列上出现的次数Name
,
包括San Jose Area 25
(因为它包含子字符串Area 25
)
但不包括San Jose Area 252
和Area 251
(因为这些字符串以字符串之后的数字结尾Area 25
),并且也不Area 25-A
包括(因为Area 25
与另一个子字符串相连-A
:
所以我希望在单元格 D3 中看到的结果是4,分别为:(
Area 25
单元格 A3 和 A11)、
Area 25 Zone B
(单元格 A4)和
San Jose Area 25
(单元格 A8)。
答案1
您可以以不同的方式处理“IF”部分。
=COUNT(SEARCH("Area 25",IF(NOT(ISNUMBER(VALUE(RIGHT(A1:A10,1)))),A1:A10,"")))
RIGHT(something,1)
找到每个 STRING 的最后一个字符,然后VALUE()
尝试将其变成数字。ISNUMBER()
测试是否成功,并将NOT()
其找到的 TRUE/FALSE 值反转为 FALSE/TRUE。
IF()
然后使用这些 TRUE/FALSE 结果来决定如何分支,返回单元格值或“”。您只测试那些符合测试的单元格,因为它们的最后一个字符不是数字。
SEARCH()
查找所有这些,包括空白和所有内容,但重要的是,那些仍然有值的单元格,以查找您要查找的内容。它将返回每个字符串的起点,因此不能简单地返回SUM()
结果。错误返回也不会使这变得容易。但是,成功是数字结果,因此简单的方法是COUNT()
通过计数来完成。它会忽略任何非数字的内容,因此它会忽略错误。它还将数字计为“1,每个”,因此如果目标字符串从字符 37 开始,因此该单元格的返回值为 37,它仍然COUNT()
只是“1”,而不是“37”,所以这里就是你想要的。
在提出这个问题的时候,以及现在(2021年),范围可以是命名范围,允许它扩大和缩小而无需在公式中进行更改。
现在,如果人们想要明确地看到范围并确保它是正确的,而无需深入研究命名范围,则可以LET()
在公式的最开始定义“命名范围”,这样就很容易查看和编辑。