Excel公式练习92:统计两个字符串共有的唯一字符数
excelperfect
引言:本文的练习整理自chandoo.org。多一些练习,想想自己怎么解决问题,看看别人又是怎解决的,能够快速提高Excel公式编写水平。
本次的练习是:给定两个字符串,计算这两个字符串中共有的唯一字符数。这两个字符串可能包含任意数量的字符,例如字母、数字、符号等,每个字符串的长度不固定。
公式中不得使用任何辅助单元格、名称等。不区分大小写,即大写字母与小写字母没有区别,“A”和“a”等价,每个字符串中的字符可以按任意顺序出现。
示例数据如下图1所示。
图1
上图1中,字符串“Ridiculous”和“Simple”具有共同的字母“s”、“i”和“l”。因此,返回的值应为3。
写下你的公式。
解决方案
公式1:
在单元格C2中输入数组公式:
=COUNT(MATCH(ROW(INDIRECT('1:'&LEN(A2))),SEARCH(MID(B2,ROW(INDIRECT('1:'&LEN(B2))),1),A2),0))
向下拖放复制到数据末尾。
公式中:
MID(B2,ROW(INDIRECT('1:'&LEN(B2))),1)
将单元格B2中的字符串拆分成单个字符组成的数组:
{'S';'i';'m';'p';'l';'e'}
然后,SEARCH函数在单元格A2中搜索这些字符:
SEARCH({'S';'i';'m';'p';'l';'e'},A2)
返回由字符位置组成的数组:
{10;2;#VALUE!;#VALUE!;7;#VALUE!}
公式中:
ROW(INDIRECT('1:'&LEN(A2)))
返回从1至单元格A2字符长度的连续数字组成的数组:
{1;2;3;4;5;6;7;8;9;10}
这样,MATCH函数变为:
MATCH({1;2;3;4;5;6;7;8;9;10},{10;2;#VALUE!;#VALUE!;7;#VALUE!},0)
返回数组:
{#N/A;2;#N/A;#N/A;#N/A;#N/A;5;#N/A;#N/A;1}
传递给COUNT函数:
COUNT({#N/A;2;#N/A;#N/A;#N/A;#N/A;5;#N/A;#N/A;1})
统计数组中数字的数量:
3
即为两个字符串共有的唯一字符数。
公式2:
在单元格C2中输入数组公式:
=SUM(--(FREQUENCY(IFERROR(SEARCH(MID(A2,ROW(OFFSET(A$1,,,LEN(A2))),1),B2),FALSE),ROW(OFFSET(A$1,,,LEN(B2))))>0))
向下拖放复制到数据末尾。
公式3:
在单元格C2中输入数组公式:
=SUM(IF(FREQUENCY(CODE(MID(UPPER(A2),ROW(INDIRECT('1:' & LEN(A2))), 1)), ROW($64:$90)) * FREQUENCY(CODE(MID(UPPER(B2),ROW(INDIRECT('1:' & LEN(B2))), 1)), ROW($64:$90)) *MID(0&REPT(1, 26) & 0, ROW($1:$28), 1), 1))
向下拖放复制到数据末尾。