你问题的最朴素解决办法(在Excel和Google Docs中测试过)是简单地将多个countif
公式的结果相加:
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*")
这个表达式将计算所有包含"yes"或"no"的单元格的总数。它将对包含"yesno"或"noyes"的单元格进行双重计数,因为它同时匹配了这两个表达式。您可以尝试使用
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*") - COUNTIF(B5:O5, "*no*yes*") - COUNTIF(B5:O5, "*yes*no*")
但是如果出现像noyesno
这样的字符串,你仍然会遇到麻烦。
然而,在谷歌文档中有一个非常巧妙的技巧,可能只是你正在寻找的解决方案的暗示:
=COUNTA(QUERY(A1:A9, "select A where A matches '(.*yes.*)|(.*no.*)'"))
QUERY
函数类似于一个小型数据库。在这种情况下,它查看范围内的表格
A1:A9
,并仅选择与列 A 中对应元素匹配的元素(按照 "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" 的单元格,并计算其中包含这些字符串之一的单元格数量。
QUERY
之前对TRANSPOSE(B5:O5)
进行转置吗?或者QUERY
在匿名矩阵的列标识符上存在问题吗? - MichaelQUERY(TRANSPOSE(B5:O5), "select A")
,也不是用…, "select col1")
,甚至不是用QUERY({"foo"; TRANSPOSE(B5:O5)}, "select foo", 1)
。它总是抱怨缺少列标识符。select *
可以工作,但你不能在where
子句中使用*
。 - MichaelCol1
是“魔法”标识符,并且它区分大小写。请注意,它在文档示例标识符中的大小写不正确。 - Michael