Excel函数式编程,我单走一个6!

作者:E精精 发布时间: 2022-12-06 15:15 阅读(470)  

你觉得现在的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个,后续微软更新,我们第一时间更新发布,更多的案例,也在收集整理中!

 

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注