将数字去重,然后按从小到大的顺序连接起来!

-01-
下图A1:I7是数据源,都是0-9之间的数字。现在的要求是将每行的数字去重,然后按从小到大的顺序连接起来。结果如J列所示。每行只有9个数字。

对于这个问题,不同版本的excel,会有不同的解决方法,当然难度也会不同。版本越高,难度越低;版本越低,难度越高。这就是工具的重要性。

如果有office365的话是最简单的。只需在J2单元格输入公式=CONCAT(SORT(UNIQUE(A2:I2,1),1,1,1)),向下填充,就完成了。unique去重,sort排序,concat连接。
-02-

如果没有office365的话,有文本连接函数concat和textjoin也是不错的,难度也会降低很多。因为在excel工作表函数中,文本连接函数是非常重要的,它很难通过其他函数的嵌套来达到文本连接的效果。

不像拆分这么容易,就算没有split函数,也能通过其他函数的嵌套来达到拆分的效果,比如mid+substitute+rept组合或者是filterxml。

下图就是用concat函数实现的效果,在J2单元格输入公式=CONCAT(IF(COUNTIF(A2:I2,ROW($1:$10)-1),ROW($1:$10)-1,"")),按ctrl+shift+enter三键,向下填充。

COUNTIF(A2:I2,ROW($1:$10)-1)这部分,用countif函数统计A2:I2中0-9的个数,返回的结果为{2;1;0;2;0;0;0;1;1;2}。也就是找到的返回它的个数,没找的返回0。比如0有2个,就返回2;1有1个,就返回1。

IF(COUNTIF(A2:I2,ROW($1:$10)-1),ROW($1:$10)-1,"")这部分,是用if函数进行判断,如果上一步统计的结果是非0的数字,那么就返回第2参数0-9对应的数字,否则就返回空文本。这一步的结果是{0;1;"";3;"";"";"";7;8;9}。

最后外面套个concat,将这些数字连接起来就可以了。
-03-

如果你的excel版本没有文本连接函数,那么你最好升级一下版本,要么就提升一下自己的函数水平,或者是学一下其他excel技术,比如pq和vba等。此时只用工作表函数来做就有些难度了。

下图是用mode.mult函数结合除法来实现的效果。此公式需要有一定的基础才能看懂。这里我就不详细拆解了,有基础的小伙伴可以自己拆解。公式如下,按三键结束。

=MID(SUM(IFNA(MODE.MULT(IF(COUNTIF(A2:I2,ROW($1:$10)-1),ROW($1:$10)-{1,1}))/10^ROW($1:$9),)),3,9)

下图是另一种方法,用的就是昨天说的进制转换的方法。此方法是从雪神那里学来的。公式如下,按三键结束。

=SUBSTITUTE(BASE(SUM(10*16^10,IF(COUNTIF(A2:I2,ROW($1:$10)-1),ROW($1:$10)-1,10)*16^(10-ROW($1:$10))),16),"A",)

链接:

https://pan.baidu.com/s/1Axf2JtLbTkKrtxNQ8hlpJg

提取码:7661
(0)

相关推荐