乐于分享
好东西不私藏

Excel函数实战系列 第18期

Excel函数实战系列 第18期

Excel函数实战系列 第18期

小伙伴们,今天继续我们的函数实战系列,今天我们更新到第18期。
还是工作中的遇到的实际问题。
现有A2:A22数据区域,需把每个非空单元格的内容按分隔符拆分,表格格式不能变。
我们刚好聊了2个365新函数TEXTBEFORE和TEXTAFTER,正是这两个函数的拿手好戏,我们正好拿这道题目来练练手。
我们来分析一下:
文本拆分,这不是重点,重点是如何拆分后,表格的格式不能改变,把拆分后的内容填充到空白单元格里边去,我们配合365新函数SCAN,来把这个问题搞定。
先把公式贴出来:
=IFNA(TEXTBEFORE(SCAN(,A1:A22,LAMBDA(X,Y,IF(Y<>"",Y,TEXTAFTER(X,"、")))),"、",,,1),"")
公式不难,我们今天详细拆解一下。
SCAN(,A1:A22,LAMBDA(X,Y,IF(Y<>"",Y,TEXTAFTER(X,"、"))))
这部分的结果我用淡绿色颜色标注出来。
第一次循环,用SCAN函数在A1:A22中循环,初始值也就是LAMBDA的参数X为空,直接把A1的值赋给X。
第二次循环,X等于“数据”。Y取值“宋江、宋江”,因为Y<>"",所以还等于Y,把“宋江、宋江”赋值给X。
第三次循环,X等于“宋江、宋江”,Y="",所以TEXTAFTER(X,"、"),得到宋江,并赋值给X。
第四次循环,X等于“宋江”,Y="",所以TEXTAFTER(X,"、"),错误值,并赋值给X。
第五次循环,X等于错误值,因为Y<>"",所以返回Y,并将Y的值“吴用、吴用、吴用”赋给X。
第六次循环,X等于“吴用、吴用、吴用”,以此类推...
如此循环,得到淡蓝色列的结果。
TEXTBEFORE(SCAN(,A1:A22,LAMBDA(X,Y,IF(Y<>"",Y,TEXTAFTER(X,"、")))),"、",,,1)
接下来就简单了,用TEXTBEFORE函数提取分隔符前面的数据,注意一点的是,要把第5个参数设置为1,也就是末尾匹配,如果没有分隔符返回自身。
最后用IFNA函数把其中的错误值替换为空,就达到想要的结果。
IFNA(TEXTBEFORE(SCAN(,A1:A22,LAMBDA(X,Y,IF(Y<>"",Y,TEXTAFTER(X,"、")))),"、",,,1),"")
好了,今天的实战也很简单,有兴趣的朋友练习起来吧!