手机版

如何计算分隔字符串中非重复子字符串的数量?

时间:2021-09-19 来源:互联网 编辑:宝哥软件园 浏览:

问:在某些情况下,我们可能需要计算带有分隔符的字符串中非重复子字符串的数量。如下图,我想知道单元格A1中有多少数字没有重复,公式怎么写。

答:下面的数组公式可以完成单元格A1的字符串非重复值的统计:

=SUM(N(MATCH(TRIM(MID(SUBSTITUTE(A1,",",",retp(",999))))、ROW(inquisitive(" 1: " LEN(A1)-LEN(SUBSTITUTE(A1,",","))1))))* 999-998,999(TRIM(MID(SUBSTITUTE(A1,",",",")))))))))、ROW(inquisitive(" 13: " LEN(A1)-LEN(SUBSTITUTE(A1,",",","))1))*999-998,999)

结果是6。注意,输入公式后,按Ctrl+Shift+Enter。

公式分析

这么长的公式可能一看就吓到了。让我们看看这个复杂的公式是怎么来的。

上述公式可以简化为:

=SUM(N(MATCH(单元格中的子字符串数组,单元格中的子字符串数组),=连续数字的数组))。

其中,在一个单元格中生成由子字符串组成的数组的公式为:

TRIM(MID(SUBSTITUTE(A1,",",",REPT(",999))),ROW(INDIRECT(" 1: " LEN(A1)-LEN(SUBSTITUTE(A1,",",")))1))*999-998,999))

行(间接(“1:”len(a1)-len(替换(a1,“、”、“)”)1))获取从1到子字符串数的连续数字。在本例中,单元格中的子字符串数组为:

{"1;"2;"3; "1;"2; "3;"4; "5;"6"}

上面的数组被用作MATCH函数的参数。找到每个子串在上面数组中出现的位置,得到下面的数组:

{1;2;3;1;2;3;7;8;9}

在公式中:

行(间接(“1:”LEN(A1)-LEN(替换(A1,“,”,“)”)1))

生成连续数字的数组:

{1;2;3;4;5;6;7;8;9}

比较上面生成的两个数组:

{1;2;3;1;2;3;7;8;9}={1;2;3;4;5;6;7;8;9}

获取布尔值数组:

{真;真;真;假;假;假;真;真;真}

其中“真”表示该值不重复,“假”表示该值重复。因为非重复值的位置要与其在子串中的位置一致,也就是说比较结果为TRUE;如果位置不一致,说明子串之前已经出现过,是重复值,比较结果为FALSE。

n函数将上述布尔数组转换为由和1组成的数组:

{1;1;1;1;1;1}

数组中元素的总和是不同值的数量。

版权声明:如何计算分隔字符串中非重复子字符串的数量?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。