关于字符串:使用单元格公式计算一系列单元格中重复出现的子字符串的数量

Counting the number of recurring substrings in a range of cells with a cell formula

我正在尝试对出现在Google表格列中某个单元格区域中的子字符串的发生进行统计,但是我的问题有点小,这妨碍了快速简便的解决方案计算正确的总数。我在下面放了一个相对简单的示例表(对不起格式)来演示:

列A:名称| B栏:发生次数| C列:列表

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

A3:鲍勃| B3:[空白] | C3:亚当

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

A5:史密斯,查尔斯| B5:[空白] | C5:鲍勃·埃文斯

A6:鲍勃·埃文斯| B6:[空白] | C6:史密斯,查尔斯;查尔斯鲍勃

A7:[空白] | B7:[空白] | C7:鲍勃·埃文斯;查尔斯鲍勃

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

我要搜索的名称在A列中。C列具有实际列表,其中出现的每个名称(如在A列中找到的)都与其他带有分号的子字符串偏移。作为参考,C列(在我的原始工作表中)有几百行,并且会随着添加更多数据而继续增长。

现在,我已经使用过

1
=COUNTIF(C$2:C$7," *"&A2&" *")

在B2中,依此类推以计算出现名称的单元格的数量,但是当来自A列中单元格的一个字符串作为子字符串出现在A列中的其他字符串时,并不能获得正确的总数。

列A:名称| B栏:发生次数| C列:列表

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

A3:鲍勃| B3:3 [不正确] | C3:亚当

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

A5:史密斯,查尔斯| B5:2 | C5:鲍勃·埃文斯

A6:鲍勃·埃文斯| B6:2 | C6:史密斯,查尔斯;查尔斯鲍勃

A7:[空白] | B7:2 | C7:鲍勃·埃文斯;查尔斯鲍勃

例如,尽管我从A3需要的确切字符串("鲍勃")在"列C"列表中仅出现两次,但B3中的" COUNTIF"公式也包括C5的"鲍勃·埃文斯"(但不包括"鲍勃C7内容的末尾添加了"",因为该单元格的" Bob Evans"同样已被计入)。同样,"查尔斯"的计数包括所有只应查找"查尔斯"的可能只有"史密斯·查尔斯"的像元。

我想象一种解决方案可能涉及" SPLIT"或" REGEXEXTRACT",以便仅对子字符串准确计数,因为它们恰好出现在它们的A列单元格中,但是到目前为止,我的尝试还没有得出正确的总数。任何有关如何通过此设置获得正确结果的指导(用分号分隔的子字符串,并使用单元格公式搜索该列的范围)都将受到欢迎。


B3:

1
  =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

    添加它们

注意:如果您正确指定了所有格式(包括空格数,,;),则此方法将非常有效。如果您将问题弄乱了,则此方法将不起作用,并且您将必须弄清楚如何使它适应您的实际格式。