在完成2阶的MRP物料需求后,接下来就是继续3阶、4阶的MRP运算了,一直到分解到最后一层。
2阶的需求分解如下图1所示:
图 1
3阶需求分解3阶的需求分解与2阶的公式一模一样,只需要在2阶的基础上把一维排程表引用过来就可以了,直接复制表5(2阶分解),并且命名为表6(3阶分解),同时更新以下公式:
料号:
='5.2阶分解'!AD3#
数量:
='5.2阶分解'!AE3#
日期:
='5.2阶分解'!AF3#
后面的公式继续用原来的公式即可。
完成后效果如下图2所示:
图 2
4阶需求分解3阶的公式更新完后,继续复制3阶分解这张表,并命名为7.4阶需求,然后把3阶的MPS需求引用过来,录入动态数组公式:
料号:
='6.3阶需求表'!AD3#
数量:
='6.3阶需求表'!AE3#
日期:
='6.3阶需求表'!AF3#
此时如果零件数这里显示没有数据时,代表已经到最底层了。不用继续分解了。
效果如下图3所示:
图 3
屏蔽错误值到了这里发现,如果是最底层的话,辅助这里为出现公式错误了,为了方便后面更新BOM出现第5层以上的数据,同时也需要美化表格,这里把错误值一一用屏蔽错误函数IFERROR屏蔽掉。
辅助序号:
=IFERROR(TEXTSPLIT(TEXTJOIN("/",,FILTER(F3:F4000,F3:F4000<>0)),,"/",2),0)
辅助合并:
=IFERROR(M3#&"-"&J3#,0)
辅助料号:
=IFERROR(LET(A,FILTER(B3:H4000,F3:F4000<>0),TEXTSPLIT(CONCAT(REPT(CHOOSECOLS(A,1)&CHOOSECOLS(A,7)&"/",CHOOSECOLS(A,4))),,"/",2)),0)
…………
错误全部屏蔽后的效果如下图4所示:
图 4
合并所有需求:通过多次分解后,得到所有子件的需求,因为这些需求分别在不同报表中,所以需要把这些需求全部合并在一张表上,新建表8,并命名为合并需求。
录入对应的子件标题后,录入动态数组函数:
=LET(A,VSTACK('4.1阶分解:7.4阶需求'!AD3:AF3000),FILTER(A,TAKE(A,,1)<>0))
函数释义:
上面的公式用了3个技巧:
第1个技巧:VSTACK的批量合并不同工作页面的技巧,写法是“'4.1阶分解:7.4阶需求'!AD3:AF3000”,这代表从1阶到4阶,在AD3:AF3000 的这个范围全部合并在一起。其中3000为预留的空间。
第2个技巧:定义名称技巧,这里因为预留了3000的原因,合并后,4张表大概就是3000*4=12000行数据,其中包括空单元格,所以需要筛选不为0的数据区。提前用LET定义此区域为A,后续配合筛选函数和保留数组函数来筛选。
第3个技巧:筛选不为0的技巧,录入FILTER(A,TAKE(A,,1)<>0),这个函数,表示,显示A,条件为A的第1列不为0,用TAKE配合参数1,保留了A区域的第1列。
效果如下图5所示:
图 5
合并需求转二维合并的需求是一维表,太长了,转换成二维表可以方便看子件需求。转换前把这个区域转换成单列以方便引用,分别录入以下函数:
子件:
=CHOOSECOLS(LET(A,VSTACK('4.1阶分解:7.4阶需求'!AD3:AF3000),FILTER(A,TAKE(A,,1)<>0)),1)
料号:
=CHOOSECOLS(LET(A,VSTACK('4.1阶分解:7.4阶需求'!AD3:AF3000),FILTER(A,TAKE(A,,1)<>0)),2)
日期:
=CHOOSECOLS(LET(A,VSTACK('4.1阶分解:7.4阶需求'!AD3:AF3000),FILTER(A,TAKE(A,,1)<>0)),3)
完成公式的单列后,开始转二维:
子件:
=UNIQUE(B3#)
日期:
=TOROW(SORT(UNIQUE(D3#)))
汇总:
=TOROW(SORT(UNIQUE(D3#)))
完成后如下图6所示:
图 6
这样就完成了全部的MRP多阶物料需求运算。
源文件:
314 WPS 版本 MRP需求运算.XLSX