Google sheets 我如何设计一个公式(例如COUNTIF)来搜索多个工作表中引用单元格中文本的部分匹配?
我想做的是:在我的文档末尾包含一个“统计”表,搜索每个表,并统计引用单元格(例如“缓冲区”)中的文本被提及的次数 背景:我正在努力帮助一个我辅导的学生找到他的薄弱环节。对于我们讨论的每个问题,我都有一列带有“标签”的列,例如“缓冲区”。有时一个问题有多个标签,例如“缓冲区,分子间作用力”,用逗号分隔 我一直在像这样使用COUNTIF函数:Google sheets 我如何设计一个公式(例如COUNTIF)来搜索多个工作表中引用单元格中文本的部分匹配?,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,我想做的是:在我的文档末尾包含一个“统计”表,搜索每个表,并统计引用单元格(例如“缓冲区”)中的文本被提及的次数 背景:我正在努力帮助一个我辅导的学生找到他的薄弱环节。对于我们讨论的每个问题,我都有一列带有“标签”的列,例如“缓冲区”。有时一个问题有多个标签,例如“缓冲区,分子间作用力”,用逗号分隔 我一直在像这样使用COUNTIF函数: =COUNTIF(Sheet1!E:E,"*buffers*")+COUNTIF(Sheet2!E:E,"*buffers*&q
=COUNTIF(Sheet1!E:E,"*buffers*")+COUNTIF(Sheet2!E:E,"*buffers*")+....
这正是我所需要的。但是,我有很多标签,因此我宁愿节省时间,只需在统计表中的单元格中写入缓冲区,例如A3,然后写入公式:
=COUNTIF(Sheet1!E:E,A3)+COUNTIF(Sheet2!E:E,A3)+....
然后我可以在单独的参考单元格中快速复制所有标记
当我尝试这个方法时,它只计算与“缓冲区”完全匹配的细胞,所以它没有计算带有多个标签的问题,例如“缓冲区,分子间作用力”。这是我问题的关键。有没有一种方法可以设置COUNTIF的格式,以便它能够识别引用单元格中包含文本的单元格,而不仅仅是完全匹配的单元格?类似于我对“*缓冲区*”
所做的操作
跟进:我也有很多床单。如果我能够在同一个COUNTIF中搜索多个工作表,而不是添加单独的COUNTIF,并对仅部分匹配参考单元格的单元格进行计数,那会更好
=COUNTIF({Sheet1!E:E,Sheet2!E:E,Sheet3!E:E},A3)
有什么想法吗
=if(A2="","", counta(filter(Sheet1!E:E,isnumber(search(UPPER(A2),Sheet1!E:E))=TRUE))+counta(filter(Sheet2!E:E,isnumber(search(UPPER(A2),Sheet2!E:E))=TRUE)))
不要评判我追求的是速度,但这会在你送给我的东西中实现。如果您添加更多的工作表,只需输入+counta(过滤器(Sheet3!E:E,isnumber)(搜索(上(A2),Sheet3!E:E))=TRUE))
在最后一个括号之前。这假设标签也在E列中
您可能会对if语句感到疑惑。这应该占据最后一张工作表中获得标记总数的列的每一行,这样你就可以动态添加新标记并在末尾记录它们,如果单元格为空,它将忽略它。见下文:
编辑:为了好玩,这里是如何让工作表识别两张工作表中的所有唯一标记,并自动汇总它们。所以你所要做的就是记下笔记…然后把表格添加到代码中,但是你可以一次添加一堆,然后把空的东西堆起来
将此代码放入上图(A2)中显示缓冲区的单元格中:
=unique(索引(转置(拆分(textjoin(“,”,true,过滤器(正确的(Sheet2!E:E),Sheet2!E:E“标记”),过滤器(正确的(Sheet1!E:E),Sheet1!E:E“标记”),“,”,false,true)),0,1))
这很难看,但它成功了。它首先以正确的格式获取两张图纸E列中所有非“标记”的数据,即您的“转到”列标题,因此无论您注意到是否草率,我们的重复数据消除都不会受到影响
与上面类似,添加工作表也很容易,只需放置:
,filter(proper(Sheet3!E:E),Sheet3!E:E<>"Tags"))
,过滤器(正确的(Sheet3!E:E),Sheet3!E:E“标签”))
紧跟在方程式中最后一个“标记”)之后
然后,它将所有单元格放入一个逗号分隔的列表(与在单个单元格中分隔标记的方式相同),然后一旦它是一个长的逗号分隔的单个单元格字符串,就将其拆分
然后,它对数据进行转置(旋转90度),通过索引功能进行重复数据消除。您可以使用
查询
并使用单个数组对所有数据进行计数:
=QUERY(
{Sheet1!$E$2:$E;Sheet2!$E$2:$E};
"select count(Col1) where upper(Col1) contains '"&UPPER($A2)&"' label count(Col1) ''";
FALSE
)
基本上,我们获取所有数据(E2:E
,因为我们不需要标题),将它们加入到同一列中并查询该数组
查询的结构如下所示:
选择计数(Col1)
:返回计数而不是值数组其中upper(Col1)包含“”&upper($A2)和“”
:筛选未通过测试的任何行(值);在本例中,我们检查它是否包含一些值contains
区分大小写,所以我将值和我们测试的内容转换为大写来解决这个问题标签计数(Col1)'
:将结果的标题设置为空字符串。这实际上会使标题消失,并且只将数据设置为单个单元格=QUERY(
{Sheet1!$E$2:$E;Sheet2!$E$2:$E};
"select count(Col1) where upper(Col1) contains '"&UPPER($A2)&"' label count(Col1) ''";
FALSE
)