使用单元格公式计算一系列单元格中重复子串的数量

时间:2017-09-08 14:07:21

标签: string count google-sheets substring formula

我正在尝试计算Google Sheet列中一系列单元格中出现的子串的出现次数,但是我有一个小的复杂性,它阻止了计算正确总计的快速简便的解决方案。我在下面放了一个相对简单的示例表(抱歉格式化)来演示:

A栏:名称 | B栏:出现次数 | C栏:列表

A2:亚当| B2: [空白] | C2:查尔斯;亚当

A3: Bob | B3: [空白] | C3: Adam

A4:查尔斯| B4: [空白] | C4:史密斯,查尔斯

A5:史密斯,查尔斯| B5: [空白] | C5: Bob Evans

A6: Bob Evans | B6: [空白] | C6:史密斯,查尔斯;查尔斯;鲍勃

A7: [空白] | B7: [空白] | C7: Bob Evans;查尔斯;鲍勃

A8: [空白] | B8: [空白] | C8: [etc。]

我正在搜索的名称位于A列中.C列具有实际列表,其中显示的每个名称(如A列中所示)与其他带分号的子字符串相抵。作为参考,C列是 - 在我的原始工作表中 - 数百行深,随着更多数据的添加将继续增长。

现在,我已经使用了

=COUNTIF(C$2:C$7," * "&A2&" * ")
B2中的

等等,以计算出现名称的单元格数,但当A列中的单元格中的一个字符串在A列的其他位置显示为子字符串时,它不会得到正确的总数。

A栏:名称 | B栏:出现次数 | C栏:列表

A2:亚当| B2: 2 | C2:查尔斯;亚当

A3: Bob | B3: 3 [不正确] | C3: Adam

A4:查尔斯| B4: 4 [不正确] | C4:史密斯,查尔斯

A5:史密斯,查尔斯| B5: 2 | C5: Bob Evans

A6: Bob Evans | B6: 2 | C6:史密斯,查尔斯;查尔斯;鲍勃

A7: [空白] | B7: 2 | C7: Bob Evans;查尔斯;鲍勃

例如,虽然我需要A3(“Bob”)的确切字符串在C列列表中只出现两次,但是" COUNTIF" B3中的公式还包括C5的“Bob Evans”(但不计算C7内容结尾处的“Bob”,因为该单元格同样已经计入其“Bob Evans”)。同样地,“查尔斯”的计数包括所有可能只有“史密斯,查尔斯”的细胞,而它只能找到“查尔斯”。

我认为解决方案可能涉及" SPLIT"或" REGEXEXTRACT"只计算它们在A列单元格中精确显示的子字符串,但到目前为止我的尝试还没有显示正确的总数。有关如何使用此设置获得正确结果的任何指导(以分号分隔的子字符串并使用单元格公式搜索该列的范围)将受到欢迎。

1 个答案:

答案 0 :(得分:0)

B3:

  =ARRAYFORMULA(IF(A3="","",(SUMPRODUCT(REGEXMATCH(REGEXREPLACE($C$3:$C$15,"(\w+),{0,1}\s+(\w+)","$1$2"),".*(^|\s)"& trim(REGEXREPLACE($A3,"(\w+),{0,1}\s+(\w+)","$1$2"))&"(;|$).*")))))
  • 我们使用REGEXREPLACE来查找Smith, Charles等双重名称并将它们合并为一个实体(A3(名称列)和C3:C7(列列)中的两者)

  • 然后我们使用REGEXMATCH来查找修改后的A3是否与任何修改后的C3匹配:C7

  • 然后,我们使用SUMPRODUCT

  • 添加它们

注意: 如果您已正确提供所有格式(包括空格数,;),这将完美无缺。如果您已经在你的问题中搞砸了,那么这将不起作用,你将不得不弄清楚如何使其适应你的实际格式。