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 添加它们
注意:如果您正确指定了所有格式(包括空格数,