通过对排程表增加的辅助列,最终的目标就是进行MRP毛需求的分解,有了这些信息就可以根据BOM分解,然后求出所排料号的毛需求,最终完成的效果如下图1
图 1
父件按数量重复堆积MPS中排程的料号对应有几个零件料号就需求重复几次并规程,如上图中的MPS料号A排程了三次,分为三个出货日期,零件数是5个,料号A就需求重复15次,并按垂直方向堆积。
这样重重的目的就是配合前期BOM表(下图2)中辅助列“A-1,A-2”进行一对一匹配,有了这样的重复加数字序号,就不会出现XLOOKUP引用时出现的一对多问题了。
图 2
父件标题中录入动态数组公式:
K3=TEXTSPLIT(CONCAT(REPT(B3:B10&"/",E3:E10)),,"/",3),
函数释义:
REPT函数是指定重复的功能,重复的区域就是MPS在排程的区域B3:B10,也就是料号区,这里用文本符号“&”连接了一个特殊符号“/”的目的是为了重重后的料号进行隔开,不连接的话重重5次就变成了“AAAAA”,这样的效果。
CONCAT函数把这些重复后的数据区域全部合并成一个单元格,最后用TEXTSPLIT按符号“/”进行分列,最后形成如下图3的效果。
图 3
辅助序号中录入动态数组公式:
J3=TEXTSPLIT(TEXTJOIN("/",,F3:F10),,"/",2)
函数释义:
与上方重重父件思路一样的,通过TEXTJOIN把零件辅助,也就是“1/2/3/4/5”这个区域F3:F10,用符号"/",连接成一个单元格,最后用TEXTSPLIT再次分开,分开的条件是"/",,参数2是,是代表忽略空单元格。
把这两个辅助列合并,录入动态数组公式:
N3=K3#&"-"&J3#,这样就形成与BOM表中的数据一一对应的编号了。
完成后的效果如下图4所示:
图 4
BOM子件数据引用子件录入动态数组公式:
O3=XLOOKUP(K3#,'2.BOM'!B:B,'2.BOM'!E:E)
用量录入动态数组公式:
=XLOOKUP(K3#,'2.BOM'!B:B,'2.BOM'!F:F)
函数释义:
XLOOKUP的第1参数用的是动态数组的写法,也就是K3#,这个K3#代表的就是上面的公式:TEXTSPLIT(CONCAT(REPT(B3:B10&"/",E3:E10)),,"/",3),这个公式是用动态数组公式写的,所以只需要加个#号就完成了一个区域的引用。
完成后的效果如下图5所示:
图 5
此时虽然完成了MPS的料号BOM物料清单展开,但是无法匹配料号,因为料号在MP3中排程了三次,如果引用的话只能引用到第一次的排程数量和日期,也就是数量100和日期8/19K号的。所以还需要继续加辅助列。
辅助料号并引用辅助料号录入动态数组公式:
L3=TEXTSPLIT(CONCAT(REPT(B3:B10&H3#&"/",E3:E10)),,"/",2)
函数解释:
与辅助父件的思路一样,在重重函数REPT前用文本连接符号“&”连接了H3#,这个H3#对应的就是料号辅助的一个区域,代表一个唯一值判定。
完成后效果如下图6所示:
图 6
通过与MPS中的辅助料号形成了一个唯一数据的判断区域,此时用XLOOKUP就可以直接引用排程数量并计算毛需求了。录入动态数组公式:
数量:N3=XLOOKUP(L3#,G:G,C:C)
日期:R3=XLOOKUP(L3#,G:G,D:D)
子件需求:Q3=N3#*P3#
到这里,MP3对应的1阶毛需求全部用公式自动完成了。特别注意填充公式与动态数组公式的区别。
完成后的效果如下图7所示:
毛需求计算出来后,就需求根据库存来判断2阶的需求,在判断2阶的需求前,需要对毛需求进行再次的数据整理。