戳蓝字“Excel星球”关注我哦。
HI,大家好,我是星光。
前段时间微软一口气测试了14个新函数,其中有些函数极其重要(本文第3小节),较大程度改变了函数核心数据结构数组的薄弱性。函数获取数据的能力提高了,解决复杂数据查询问题的能力更是指数级提升,今天就给大家稍微展开聊一下。
1
文本处理函数

=TEXTSPLIT(A2,"-")
=TEXTSPLIT(A2,{"-","/"})
=TEXTSPLIT(A2,"-",";",,"数据缺失")
2
数组结构转换函数
=TOCOL(A1:C4,1,1)
=WRAPROWS(TOCOL(A2:D6,1,0),2
公式先用TOCOL函数将4列数据转换为1列的一维数组,再用WRAPROW函数将一维数组按每2个元素为一行转换为二维数组。
3
数组动态扩展函数
。
1,VSTACK:将多个数组纵向合并。2,HSTACK:将多个数组横向合并。3,TAKE:从数组的头或尾截取指定行/列数4,DROP:从数组的头或尾删除指定行/列数5,CHOOSEROWS:从二维数组中选取指定的行数6,CHOOSECOLS:从二维数组中选取指定的列数7,EXPAND:将数组扩展指定行/列,并填入指定值
照例举几个简单的小栗子。
▎选取指定行列
有一张数据表,如下图所示。
=CHOOSECOLS(A1:E7,{1,2,5})
=CHOOSECOLS(A1:E7,MATCH({"班级","姓名","英语"},A1:E1,0))
▎合并多个子数组
将多个子数组合并是很常见的问题,以前的解决方式需要借助LOOKUP函数或者字符串结构,复杂低效不灵活,这可以参考往期推文【看晕了,用Excel函数将多个一维数组合并成一维数组】
如下图所示,需要计算A列和C列两列人名不重复的名单。

代码看不全可以左右拖动...▼
=UNIQUE(VSTACK({"不重复名单"},A2:A7,C2:C8))
又或者将多个工作表的数据合并👇
=VSTACK(一班!A1:C7,二班!A2:C7)
=HSTACK(一班!A2:C7,二班!A2:C7)
代码看不全可以左右拖动...▼
=REDUCE({"发票展开"},B2:B4,LAMBDA(_a,_b,LET(_y,_b+SEQUENCE(VLOOKUP(_b,B:C,2,0)-_b+1)-1,VSTACK(_a,_y))))
12340,12341,12342,12343,12345,12346
如此迭代直至遍历完成B2:B4区域的最后一个元素。
将数组动态扩展函数和REDUCT搭配使用,工作表函数就可以有机会像Power Query M函数的List.Accumulate似的,变成万能套路;如果你擅长M函数,那么对于该套路的强大应该并不陌生
再举个小栗子。

如上图所示,A列是混合字符串,需要从中统计人名及总分。
这样的问题,旧的常规的函数解法是先用辅助列把数据拆分整理,然后再分类汇总。而拥有这波新函数,我们就可以实现编程式函数,一条公式直接搞定:
=LET(_lst,DROP(REDUCE({""},A2:A11,LAMBDA(_d,_s,VSTACK(_d,INDEX(TEXTSPLIT(_s,{"-",";"}),{1,4})))),1),_nm,CHOOSECOLS(_lst,1),_score,CHOOSECOLS(_lst,2)*1,_unm,UNIQUE(_nm),_rst,MAP(_unm,LAMBDA(_r,SUM(FILTER(_score,_nm=_r)))),VSTACK({"姓名","总分"},HSTACK(_unm,_rst)))
……
正式拥有这些新函数后,Excel函数就可以称之为编程语言了吗?假笑来说,仁者见仁智者见智,坦白而言,那当然还差…咳,这事你开心就好,咱们谁和谁啊,谁都不认识谁不是o(゚Д゚)っ啥!
留一个话题吧,你期待微软下一步推出测试哪些新函数呢?数组动态读写?跨工作簿读取?分组自定义聚合Group?正则表达式Reg?还是……不妨留言说说。
今天给大家分享的内容就这样,有啥问题可以在VIP会员群中提问交流↓👇↓ 挥挥手,咱们明天再见。
扩展阅读

