如何使用多个单元格作为搜索参数在单元格中搜索子字符串? [Google表格]

时间:2020-10-01 15:26:03

标签: google-sheets substring google-sheets-formula

在Google表格中, 我正在尝试指出特定列(称为“目标列”)中的每个单元格是否包含一组单元格(称为“单词仓库”)中列出的任何单词。

这个想法是,“目标”列中的每个不为空并且不包含Word仓库中任何单词的单元格将+1添加到电子表格中的其他单元格。

例如,如果我的列包含{“ No”,“ Not”,“ None”,“ Negative”}中的任何一个,那么我将忽略它。如果它包含其他任何内容(并且不为空),则将被计数。

使用django_filters.RangeFilterSearch并没有帮助,因为它们期望单个字符串值而不是单元格范围(字仓库)。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下公式:

=--ArrayFormula((SUM((--ISNUMBER(SEARCH(TRANSPOSE($D$1:$D$4),A1))))=0)*(A1<>""))

在示例中,范围A1:A7Target column,范围D1:D4Word warehouse

enter image description here

答案 1 :(得分:0)

我可能有一个适合您的答案。参见my sample sheet here

样本表中的关键公式C2为:

=QUERY(A2:B,"SELECT A WHERE UPPER(A) MATCHES '" & 
  UPPER(".*" & JOIN(".*|.*",FILTER(B2:B,B2:B<>"")) & ".*") &
  "' ",0)

其中A2:A是您的“目标列”,而B2:B是您的“字库”。 这会针对B列中的(过滤后的)单词(或短语)列表测试A列中的每个单词或短语,并生成所有匹配的单词或短语的列表。

通过对A列中的条目总数进行计数,然后减去匹配项的数量,就可以得到所有不匹配项的计数。这可以通过以下公式完成-我的样本表中为D2:

=COUNTA(A2:A) - 
 COUNTA(QUERY(A2:B,"SELECT A WHERE UPPER(A) MATCHES '" & 
          UPPER(".*" & JOIN(".*|.*",FILTER(B2:B,B2:B<>"")) & ".*") & 
          "' ",0))

请注意,我已使匹配不区分大小写。通过删除公式中两个位置的上位函数,可以很容易地将其删除。这也匹配部分匹配,例如单词仓库中的“ Catcher”匹配“ cat”。这也可以轻松更改。

即使每个短语包含仓库中的几个单词,我也只计算一个短语的匹配项。

让我知道这是否有帮助。

enter image description here