提取不重复数并从小到大组合,这个Excel操作秀到我了
作者:曹洪波来源:部落窝教育发布时间:2021-11-10 09:14:48点击:2939
编按:
大家好啊,今天给大家分享一道趣味题,希望大家可以从中学到数据处理的思路与技巧,并且活学活用,最后能将这种Excel思维带到工作中去。
题目是这样的:
把A列到G列里面的数据自动取尾数,然后去掉重复的尾数,按从小到大升序排列,最后合并到H列对应的单元格里。
题目读起来很简单,但这道题内涵却非常丰富,并且应用到多个函数及嵌套,是一道非常有意思的烧脑题目!
怎么样?小伙伴们有思路了吗?
在单元格H2中输入公式“=MID(SUM(IFERROR(SMALL(IF(MMULT(1-ISERROR(FIND(ROW($1:$14)-1,RIGHT(A2:G2))),ROW($1:$7)^0),ROW($1:$10)-1),ROW($1:$10))/10^ROW($1:$10),"")),3,10)”,三键回车并向下拖拽即可。
思路解析:
1. 既然要取尾数,位数包含0-9共10个数字,那么第一个想到的就是将这组数据的位数用RIGHT函数提取出来后,用FIND函数在源数据中查找0-9这10个数字。查不到则意味着该数字不包含在源数据中。因此,我们可以把公式写成“=FIND(ROW($1:$10)-1,RIGHT(A2:G2))”。这里ROW($1:$10)-1代表着0-9这10个数字。
2. 接下来用ISERROR函数来做一个判断,“=ISERROR(FIND(ROW($1:$10)-1,RIGHT(A2:G2)))”将错误值都转换为TRUE,数字都转换为FALSE。这一步为后面的计算做好了准备。
3. “=1-ISERROR(FIND(ROW($1:$10)-1,RIGHT(A2:G2)))”部分,用1减去步骤2,是将错误值都转换为0,数字都转换为1。因为只有真正查找到的数字才会对后面的计算有实际意义。
4. 下面该要MMULT函数出场了。“=MMULT(1-ISERROR(FIND(ROW($1:$10)-1,RIGHT(A2:G2))),ROW($1:$7)^0)”部分,如下图。它的结果表达的含义是有几个0、几个1、…、几个9在源数据中被查询到(图中黄色部分)。
5. 接下来利用IF函数对上述结果做一个判断。“=IF(MMULT(1-ISERROR(FIND(ROW($1:$14)-1,RIGHT(A2:G2))),ROW($1:$7)^0),ROW($1:$10)-1)”部分,如果为真(大于0的任何数字时),返回对应的0-9中的数字;为假时,返回错误值,其结果为{0;FALSE;2;FALSE;FALSE;5;6;7;8;9;FALSE;FALSE;FALSE;FALSE}。
6. “=SMALL(IF(MMULT(1-ISERROR(FIND(ROW($1:$14)-1,RIGHT(A2:G2))),ROW($1:$7)^0),ROW($1:$10)-1),ROW($1:$10))”部分,利用SMALL函数依次取出上述部分从第1到第10的数字。其结果为{0;2;5;6;7;8;9;#NUM!;#NUM!;#NUM!}。
7. 接下来这一步很关键。将上述结果分别除以10^ROW($1:$10),结果为{0;0.02;0.005;0.0006;0.00007;0.000008;0.0000009;#NUM!;#NUM!;#NUM!}。看看和步骤6中的结果有什么变化?
8. 利用IFERROR函数将错误值转换为空值。得出{0;0.02;0.005;0.0006;0.00007;0.000008;0.0000009;"";"";""}。
9. 利用SUM函数求和,结果是0.0256789。
10. 利用MID函数从第3位开始提取字符串,就是我们想要的结果。
本文配套的练习课件请加入QQ群:902294808下载。
做Excel高手,快速提升工作效率,部落窝教育《一周Excel直通车》视频和《Excel极速贯通班》直播课全心为你!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
将excel中的数据按照指定数量进行重复,非得用VBA才能实现吗?
Power Query的数据替换技巧比Excel函数更万能!
版权申明:
本文作者曹洪波;同时部落窝教育享有专有使用权。若需转载请联系部落窝教育。