合并全部展开需求
展开后的需求分为自制件与采购件,对应上图中的就是MPS半成品生产计划,以及各层的原料的需求,在合并自制需求前,我们需求把所有层级的展开全部合在一起。
因为订单的变化会造成每一层级展开的项次不一样,所以每一个层级都需要预留足够多的行数来合并,这样才不会有遗漏。合并多区域的公式需要用到365函数 VSTACK
录入函数:

=VSTACK(K4:Q10000,X4:AD10000,AK4:AQ10000)
通过这个函数就把3层展开的需求全部合并在一起了,有了这一步就可以再次分解出自制件与采购件的需求了。
因为这里每一层都预留了空,合并后就会显示很多0,需要通过筛选函数把不等于0的数据筛选出来,录入函数:
=LET(A,VSTACK(K4:Q10000,X4:AD10000,AK4:AQ10000),FILTER(A,CHOOSECOLS(A,1)<>0))
上面这个去0的技巧是需要用本本记下来的,在做全自动报表中特别有用。
全阶的物料需求
刚刚已经把全阶的物料需求都合并起来了,此时就可以用这个需求来做出子件的二维需求,子件的需求(自制件和采购件)分别属于工厂的不同的职能部门,所以这里我们分开做。
在做子件需求前,需要把合并需求的结果分成一列一列,所以分别录入以下公式,把合并需求的动态数组分成一列一列。
=CHOOSECOLS(LET(A,VSTACK(K4:Q10000,X4:AD10000,AK4:AQ10000),FILTER(A,CHOOSECOLS(A,1)<>0)),1)
后面的公式就是参数变成2,3,4,5,6,7,这里就不再写了。
自制件需求:
子件录入公式:
=UNIQUE(FILTER(AU4#,AY4#<>"原料"))
筛选展开需求中属性不等于原料(自制件)的子件,并删除重复项。
日期录入公式:
=TOROW(SORT(UNIQUE(FILTER(AW4#,AY4#<>"原料"))))
筛选展开需求中属性不等于原料(自制件)的对应日期,然后删除重复项,再做排序,最后转置成水平方向。
自制件需求录入公式:
=SUMIFS(AX4#,AU4#,BA4#,AW4#,BB3#)
这样就得到下图的结果:
采购件需求:
采购件的需求原理同自制件,因为这张表设计在一个页面,为了防止公式溢出,录入这个公式向右边尽可能预留多一点列,这里预留到DD列,录入以下公式:
子件录入公式:
=UNIQUE(FILTER(AU4#,AY4#="原料"))
日期录入公式:
=TOROW(SORT(UNIQUE(FILTER(AW4#,AY4#="原料"))))
汇总录入公式:
=SUMIFS(AX4#,AU4#,DD4#,AW4#,DF3#)
求和录入公式:
=DROP(REDUCE("",SEQUENCE(ROWS(DD4#)),LAMBDA(X,Y,VSTACK(X,SUM(CHOOSEROWS(DF4#,Y))))),1)
求和这里是动态数组的写法,为什么要这样写呢?因为求和的区域会动态变化,当订单变化的时候,这里也会变化。
测试是否全自动
到这里已经把全部的公式写成动态数组了,现在就需要测试是否能够在不同的BOM物料清单和不同的订单下都能够全自动生成各阶层的需求。
通过不断的变化订单数量和交期,可以发现全部都可以动态显示结果。无需多次写公式或者填充公式,定制《多阶MRP物料需求运算报表》,开发完成。
运算环境:Office 365 版本
源文件:155 VIP定制《多阶MRP物料需求运算报表》,9-28日限时分享此文件。
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!