Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 我如何设计一个公式(例如COUNTIF)来搜索多个工作表中引用单元格中文本的部分匹配?_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google sheets 我如何设计一个公式(例如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函数:

=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)'
    :将结果的标题设置为空字符串。这实际上会使标题消失,并且只将数据设置为单个单元格
  • 结果:

    工具书类

    请分享一张谷歌表格,上面有示例数据,我会做的。@WARDEN这里有一些示例数据。如果我能澄清什么,请告诉我。非常感谢你!这是一个比我更好的解决方案。非常感谢Marti!!!这个公式帮助我在多张纸上记录了100多个标签。我对你为我节省的时间感激不尽:)嘿,这真的很有帮助,我很感激你花了这么多时间!您为我创建的为每个标记添加新行的公式是KILLER。它的工作就像一个魅力!!!我有67行,我会手工完成。太感谢你了!
    =QUERY(
      {Sheet1!$E$2:$E;Sheet2!$E$2:$E};
      "select count(Col1) where upper(Col1) contains '"&UPPER($A2)&"' label count(Col1) ''";
      FALSE
    )