Excel函数式编程,我单走一个6!
你觉得现在的Excel函数能做到什么地步,很多同学应该还停留在早期的基础数据处理吧!看一个案例,你会明白现在的函数有多6!
论坛看到的一个提问,借着这个问题,我们说一下这一类问题如何处理,目前大部分提供的都是PQ和VBA解法,我们使用函数给大家操作一波!
*(数据来源:https://club.excelhome.net/thread-1648193-1-1.html)
▍函数公式解法
格式化了一下,公式看上去有点长的样子,其实思路清晰非常简单,写出来也是水到渠成
=REDUCE(
HSTACK(A1:D1, {“经理姓名”, “经理ID”}),
A2:A6,
LAMBDA(x, y,
VSTACK(
x,
LET(
_leftTitle, OFFSET(y, , , , 4),
IFNA(
HSTACK(
_leftTitle,
WRAPROWS(TOROW(OFFSET(y, , 4, , 100), 1), 2)
),
_leftTitle
)
)
)
)
)
▍思路解析
很少有公众号为大家做公式或者思路解析吧,因为这玩意处理不讨好,但是小编是真心希望大家能学到点东西的……
根据数据情况,前面4列是固定的,后面两个一组(姓名,ID)需要放下来,这个其实就是多维转一维!
①两个一组转成多行
两个一组,这个我们可以通过新数 WRAPROW 直接转
=WRAPROWS(A1:J1,2)
②一行多列组合扩展
那么如果和前面的4列拼接起来呢?其实我们前两天刚学过数组运算,没看的,>>飞机直达
HSTACK函数,直接左右拼接起来!但是你发现他报错了,其实这个错误也在我们考虑范围内,不信你继续看!
=HSTACK(A1:D1,WRAPROWS(A1:J1,2))
出现了错误,这个错误的行数正好是4列,那么我们就可以使用IFNA函数,直接做容错处理,使用4列内容直接填充,完美实现!
=IFNA(HSTACK(A1:D1,WRAPROWS(A1:J1,2)),A1:D1)
这样我们就完成了一行的处理,这个也是整个公式的核心,剩下的无非就是循环,也就是REUDCE函数的使用!
③ 通用性及优化
我们要考虑实际内容列数是不定,也就是后面的组数,所以公式中,我们还加入了这方面,主要就是利用TOROW去掉空值,然后转两列!
我们给定一个多列,这样方便扩展,比如我们再添加几组,也能自动处理!
然后处理时,利用TOROW第二参数1,忽略空值!这样就完美了!
④ REUCE循环简单演示
REDUCE就是循环第二参数,x表示前面的累计处理,y表示当前循环值,这里演示就是上下堆积起来! 可以看专题 REDUCE函数,函数版本FOR循环!
新函数已经可以完成很多过去需要VBA才能完成的事情,比如自定义函数,循环,递归等,目前都可以实现,定义变量的出现,优化了内存占用,也提高了运行速度!
长期会员教程,365函数函数式编程,初步计划更新34个,后续微软更新,我们第一时间更新发布,更多的案例,也在收集整理中!
