NGi*_*Gix 8 regex countif google-sheets
如何根据以下内容获取某些范围的出现次数
1)正则表达式
2)2+条件(假设包含"是"和/或"否"的单元格)
我现在得到的是:
COUNTIF(B5:O5; "*yes*")
Run Code Online (Sandbox Code Playgroud)
我尝试使用COUNTIF(B5:O5; {"*yes*", "*no*"})或COUNTIF(B5:O5; "(*yes*)|(*no*)"),但他们都没有工作.
或者,我如何计算包含一些域名的单元格 - yahoo.com hotmail.com和使用regexp的gmail.com?例如:
(\W|^)[\w.+\-]{0,25}@(yahoo|hotmail|gmail)\.com(\W|$)
Run Code Online (Sandbox Code Playgroud)
更新:
我找到的最简单的方法是为这些目的创建一个自定义函数,我添加了2对我来说非常有用,并希望它也会对某人有所帮助:
COUNTIF(B5:O5; "*yes*")
Run Code Online (Sandbox Code Playgroud)
和
(\W|^)[\w.+\-]{0,25}@(yahoo|hotmail|gmail)\.com(\W|$)
Run Code Online (Sandbox Code Playgroud)
为了使用它们只需申请COUNTIF(B5:O5; {"*yes*", "*no*"})或COUNTIF(B5:O5; "(*yes*)|(*no*)")
Flo*_*ris 12
解决问题的最主要解决方案(在Excel和Google Docs中测试)只需添加几个countif公式的结果:
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*")
Run Code Online (Sandbox Code Playgroud)
此表达式将使用"是"或"否"计算单元格的总数.它将使用"yesno"或"noyes"对单元格进行双重计数,因为它匹配两个表达式.你可以尝试拿出双打
=COUNTIF(B5:O5, "*yes*") + COUNTIF(B5:O5, "*no*") - COUNTIF(B5:O5, "*no*yes*") - COUNTIF(B5:O5, "*yes*no*")
Run Code Online (Sandbox Code Playgroud)
但这仍然会让你遇到麻烦的字符串noyesno.
然而,Google Docs中有一个相当聪明的技巧,可能只是提示您正在寻找的解决方案:
=COUNTA(QUERY(A1:A9, "select A where A matches '(.*yes.*)|(.*no.*)'"))
Run Code Online (Sandbox Code Playgroud)
该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")
Run Code Online (Sandbox Code Playgroud)
isnumber函数的总和作为元素OR- 不幸的是,常规OR函数似乎不适用于数组的各个元素.和以前一样,这会找到包含"是"或"否"的单元格,并计算包含其中任何一个字符串的单元格.