我正在尝试计算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列单元格中精确显示的子字符串,但到目前为止我的尝试还没有显示正确的总数。有关如何使用此设置获得正确结果的任何指导(以分号分隔的子字符串并使用单元格公式搜索该列的范围)将受到欢迎。
答案 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
注意: 如果您已正确提供所有格式(包括空格数,
和;
),这将完美无缺。如果您已经在你的问题中搞砸了,那么这将不起作用,你将不得不弄清楚如何使其适应你的实际格式。