分享

【新函数】在不同部门间插入空行!

 刘卓学EXCEL 2022-05-03 发布于安徽
-01-

下图左表是数据源,记录的是各部门人员的信息。其中相同部门的数据是排在一起的,现在的要求是在不同部门间插入空行。结果如右表所示。

有了365新函数,这个问题也很简单。公式如下图所示。主要用到循环迭代函数reduce,数组合并函数vstack,去重函数unique和筛选函数filter。

下面简单说下这个公式的思路:首先用unique对C列的部门去重,取出不重复的部门列表,然后用reduce对不重复的部门列表循环迭代处理。不重复的部门列表如下图所示。

reduce的初始值是A2:C2的表头,要循环迭代的数组就是不重复的部门列表。第一次循环的是"技术部",先用filter筛选出数据源中"技术部"的所有记录,然后用vstack将[表头,"技术部"的所有记录,""]合并起来,作为第一次循环的结果,也是下一次循环的初始值。

vstack的第3参数"",其实就是在"技术部"的所有记录后插入一个空行。

第二次循环的是"人事部",还是先用filter筛选出数据源中"人事部"的所有记录,然后用vstack将[上一次循环的结果,"人事部"的所有记录,""]合并起来,作为第二次循环的结果。

一直重复这个过程,直到把所有的不重复部门循环迭代完为止。最后用ifna处理下中间过程(vstack合并数组的过程)中产生的错误值。

-02-

拓展思考

再来多想一下,如果数据源中部门这一列是乱序的,我们想要按部门出现的先后顺序把相同部门的排在一起,该怎么做?如下图所示。

比如,第一个出现的部门是"销售部"那就先把"销售部"所有记录排列在一起第二个出现的部门是"生产部",再把"生产部"所有记录排列在一起,放在"销售部"的下面,此类推。

其实,这个问题之前也分享过,可以看《排序技巧4:按先后顺序把同类项排在一起》这篇文章。当时用的是match函数。

如果用新函数来做,和第一个案例中插入空行的方法是一样的。公式如下图所示。还是先用unique对部门去重,然后用reduce循环每个部门;用filter把每个部门的所有记录筛选出来,最后用vstack合并起来。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多