边上新建一列库存,引用表2的产品入库信息;
录入以下函数:
=SUMIFS(I3:I6,H3:H6,M3#)
函数释义:
在表2中,针对产品进行基于条件的求和操作时,请注意“M3#”代表的是一列数据,这一列是由上方的选择列函数动态生成的,体现了WPS动态数组的应用方式。
效果如下图所示:

如果直接在这里采用库存总量一次性减去订单数量的做法,将会导致问题出现,因为对于同一产品的库存数据反映的是该产品的汇总库存总量,而订单需求却分布在不同行中。因此,逐行将库存总量减去每条订单的订购数量显然不合逻辑。正确的方法应该是从库存总量中减去所有相关订单的累计需求量。
输入累计订单的公式:
=SCAN(0,M3#,LAMBDA(X,Y,LET(A,OFFSET(Y,,1),IF(Y=OFFSET(Y,-1,),X A,A))))
函数释义:
确保订单数量与产品记录相邻,在处理过程中,针对产品的每一条记录,可以通过比较其上下两行的产品是否相同来决定数量如何处理:若产品相同,则将数量相加,以实现累加效果;若产品不相同,则保留当前行的数量不变。这样就能逐步积累出每种产品的订单累计需求量。
效果如下图所示:

首先,通过将库存数量减去累计订单数量,得出的结果可能是正数、零或负数。如果得出的结果是正数或零,这意味着库存数量足以分配给对应的订单,此时可直接返回订单数量作为可分配数量。
若计算结果为负数,则取其绝对值,并与订单数量进行比较。如果这个绝对值小于订单数量,那么将订单数量与之前的判断结果(即负数)相加,作为暂时无法完全满足的订单部分。
如果这个绝对值大于订单数量,则表示库存已经分配完了,所以返回0;
对应的IF判断条件如下:
=IF(Q3#>0,N3#,IF(ABS(Q3#)<N3#,N3# Q3#,0))

最后,在每次分配完成后,加入剩余库存的实时更新提示,这样便能动态展示每次分配后仍剩余多少库存量。这样一来,当PMC生产计划部门面对销售团队查询产品库存情况时,就能够迅速且准确地回应,提高工作效率。
一键公式:若追求极致简化,可以省略辅助列的判断信息,仅通过一个公式直接得到预期结果。
录入以下公式:
=LET(g,UNIQUE(D4:D12),REDUCE({"日期","订单","产品","订单数量","分配"},g,LAMBDA(X,Y,VSTACK(X,LET(k,SORT(FILTER(B4:E12,D4:D12=Y),{3,1,4}),t,TAKE(k,,-1),HSTACK(k,DDB(t,DDB(SCAN(,t,SUM),SUMIF(H4:H7,Y,I4:I7),1,1),1,1)))))))
