函数综合实战-一个单元格中的坑!

这是知乎上看到的一位网友的提问,看了一下,虽然您可能遇不到,但是这个问题可以帮助我们检测一下,我们文本函数的学的怎么样了?看一下实战应用能不能耍起来!

分析及思路:

1、数据在一个单元格,需要使用最大的数值依次相减,那么就要考虑先逐位拆分,拆分就要看看如何文本函数的功力了!

2、拆分后再提取最大值,最后再相减,这里应该是最大值函数和数值相减问题

3、最后还要考虑拼接,我们可以使用新的拼接函数,或者考虑对应的位置乘以10的对应次方再相加。

4、最后我们还要考虑本身那位是要去掉的,其实本身相减结果是0,我们去掉0即可!

下面我们就来看看实际公式是如何书写的!(不想看过程的直接跳到结尾看结果)

第一步 | 单元格数值拆分

拆分我们可以使用MID函数,然后给出每次提取的位置,提取长度为1即可,

每次提取的位置,我们需要根据内容长度给定!这里有点综合!

如上公式我们就可以依次提取出每一位,但是这里有个问题,长度是不定的,我们不能写死ROW(1:6),这里的6,我们需要根据单元格长度来自动获取!

▼逐位提取公式

=MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1)

那么新手可能会问为什么要INDIRECT,其实你可以先按照分析和你的想法去试试

至于为什么,因为ROW的参数需要的是一个引用(Reference),而上面的写法是文本,INDIRECT则可以把文本变成引用

如果还是不懂,那么保姆级的教程,肯定也是为你们准备好了对应的INDIRECT扩展学习的教程的!

第二步 | 最大值相减
第一步中我们截取出了所有的数值,那么提取最大值也不是什么难题,只是注意一下文本函数的结果是文本,需要转成数值后才能计算!
▼MAX提取最大值
=MAX(--MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1))
有了最大值,我们还要减去上面的公式,这里我们要反复使用两次第一步的公式,有点冗余。这个是否如果你能想到新版本的LET函数则可以大大简化!
没有简化前,有点冗余
使用LET简化一下!
▼LET简化公式
=LET(截取,MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1),MAX(--截取)-截取)
如果你的版本不支持LET那么使用上面的公式吧!
OK,这里我们基本就算出差额了,下一步合并处理!
第三步 |  合并处理-重新拼接
按照思路
1、我们可以使用文本拼接函数,TEXTJOIN函数(WPS目前已支持)
▼TEXTJOIN拼接函数
=TEXTJOIN(,,LET(截取,MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1),MAX(--截取)-截取))
TEXTJOIN(拼接符号,是否忽略空值,需要拼接的数组或者单元格内容)
2、使用传统的数值相加思路
▼可以提取出ROW部分继续简化
=SUMPRODUCT(LET(截取,MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1),MAX(--截取)-截取)*10^(6-ROW(INDIRECT('1:'&LEN(A1)))))
公式的思路,看拆解出来的部分就能明白,对应的数值放到对应的位置,比如我们想要把1和2变成12,那么只要 1*10+2 =12 = 1*10^1+2*10^0,这也就是此处的核心思路了!
上面其实已经差不多了,只差一步,把多处的0去掉!非常简单了吧!
第四步 | 去掉0
直接使用替换函数替换掉即可!
▼最终公式
=SUBSTITUTE(TEXTJOIN(,,LET(截取,MID(A1,ROW(INDIRECT('1:'&LEN(A1))),1),MAX(--截取)-截取)),0,)
SUBSTITUTE第三参数省略,相当于替换成空,注意最后逗号要保留!
(0)

相关推荐