REDUCE函数是Microsoft 365中一个综合性非常强的函数,使用这个函数可以创造很多新思路来解决之前版本中需要较强技巧才能解决的问题。本例主要介绍使用REDUCE函数解决装箱问题的一种公式写法。
如下图所示,A列是产品型号,B列是产品数量,要求将产品装箱,每50个产品装一箱,不同产品型号不能装在同一个箱子里,结果如E:F列所示。例如黄色标注的C型号产品有117个,因此要装3箱,每箱分别为50、50和17。
E1单元格输入以下公式,回车后将直接生成自动溢出结果:
(资料图)
=REDUCE({"型号","数量"},A2:A5,LAMBDA(x,y,VSTACK(x,IF({1,0},y,BYROW(WRAPROWS(SEQUENCE(OFFSET(y,,1)),50),LAMBDA(z,COUNT(z)))))))
为方便查看,我们使用Excel加载项中的插件将公式进行格式化处理:
下面简单介绍公式运算过程,以第二参数y循环到A4单元格(产品C)时为例:
1)OFFSET(y,,1)获得A4单元格右侧的B4单元格的数值117。
2)SEQUENCE(OFFSET(y,,1))生成一列数据,范围是1~117。
3)WRAPROWS(SEQUENCE(OFFSET(y,,1)),50)将1~117折叠起来,每行50个,超过117的部分返回#N/A错误值。如下图所示:
4)使用BYROW函数计算第3步生成结果中每行的数字个数,返回数组{50;50;17}。
5)使用IF({1,0},y,第4步生成的数组{50;50;17}}将y值和对应数字组合在一起形成一个数组:
这样产品C就拆分成了3行,每行第2列是对应箱子里的产品个数。
6)最后使用VSTACK函数将前面已生成的X和当前循环第5步生成的数组纵向堆叠在一起。
7)A列单元格循环完毕后,公式即返回最终结果。
思考题:
如果需要生成H:J列的结果,在中间加上一个“箱号”,你会几种方法呢?
作者:超人
Copyright 2015-2022 欧洲晨报网 版权所有 备案号:沪ICP备2022005074号-23 联系邮箱: 58 55 97 3@qq.com