对您的问题最简单的解决方案(在 Excel 和 Google Docs 中测试)是简单地将几个 countif 公式的结果相加:
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*")
此表达式将计算带有“是”或“否”的单元格总数。因为它匹配两个表达式,所以它将用“yesno”或“noyes”重复计算一个单元格。您可以尝试使用
来消除双打
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*") - COUNTIF(B5:O5, "*no*yes*") - COUNTIF(B5:O5, "*yes*no*")
但是对于noyesno 这样的字符串,你仍然会遇到麻烦。
但是,Google Docs 中有一个相当聪明的技巧,它可能只是您正在寻找的解决方案的提示:
=COUNTA(QUERY(A1:A9, "select A where A matches '(.*yes.*)|(.*no.*)'"))
QUERY 函数就像一个小型数据库。在这种情况下,它会查看A1:A9 范围内的表格,并仅选择 A 列中的元素,其中 A 列中的对应元素 matches(在 preg regex 这个词的意义上)后面的表达式 - 在这种情况下, “任何后面跟着yes 后面跟着任何东西,或者后面跟着no 后面跟着任何东西”。在我制作的一个简单示例中,这仅计算一次 yesnoyes - 完全符合您的要求(我认为...)
现在您的范围B5:O5 有几列宽,只有一行高;这使得使用QUERY 技巧变得困难。不太优雅的东西(但不管范围的形状如何都有效)是这样的:
=countif(arrayformula(isnumber(find("yes",A1:A9))+isnumber(find("no",A1:A9))),">0")
isnumber 函数的总和充当元素方面的 OR - 不幸的是,常规 OR 函数似乎不适用于数组的单个元素。和以前一样,这会查找包含“yes”或“no”的单元格,并计算包含其中任何一个字符串的单元格。