仓智能制造时代,动态数组重构零差错进销存系统-2
优秀创作者
在昨天的第1章中,完成了产品信息.输入和入库表的.输入的设计,把传统的IF函数加查找引用VLOOKUP函数分别更换成IF动态数组版本加XLOOKUP高级查找引用函数。
今天的第2章中,快速的把出库表,与库存表设计完成。
出库表.输入
出库表的输入与入库表的输入格式设计成为一模一样即可,标题与公式都一样,只需要快速复制入库表.输入,新建一张工作表即可。
同时更正一下昨天的日期的函数,不能使用TODAY函数,使用TODAY函数需要每天粘贴成数值,所以这里更改这个字段为人工录入。
同时出库金额这里录入函数=H2#*OFFSET(H2#,,1),进行计算。这里的一个小技巧就是,当一份表中有一列为动态数组公式后,可以用OFFSET来偏移这一列,从而达到非动态数组列也有动态数组列的效果。
库存表.输出
库存表这一块,原表公式的的原理非常简单,就是如果产品信息A3等于空,就显示为空,否则就显示产品信息表中A3单元格信息。这个公式是个填充公式,需要下拉填充实现。并且以产品信息表的代码作为基准来统计库存结存量。当产品信息非常多的情况下,0库存的代码就会显示非常多。
这里升级为动态数组公式:
=UNIQUE(VSTACK(OFFSET(入库表.输入!C2#,,-1),OFFSET(出库表.输入!C2#,,-1)))
函数解释:
通过C2# 这个动态数组进行向左偏移一列,达到入库与出库输入动态数组化,然后用合并函数进行两个区域合并,最后用删除重复项函数进行重复项删除,得到有入库和出库的编码。相对于原表来说,这个数据只涉及到有出入库的代码,而不是所有产品信息中的代码
库存量计算
产品库存量的计算公式为期初库存加上入库数量减去出库数量,原来的公式为:=IF(B3="","",SUMIF(入库表!$C$3:$C$2000,库存统计!B3,入库表!$G$3:$G$2000))和=IF(B3="","",G3+F3-H3),这里的公式分别用的是SUMIF和IF判断。
新的动态数组公式不存在空的情况,所以不需要IF了,并且SUMIF的运算效率比较慢,这里更新为聚合汇总加查找引用的的公式。
入库数量:=VLOOKUP(A2#,GROUPBY(入库表.输入!B2:B300000,入库表.输入!I2:I300000,SUM),2,0)
出库数量:=IFNA(VLOOKUP(A2#,GROUPBY(出库表.输入!B2:B300000,出库表.输入!I2:I300000,SUM),2,0),0)
库存数量:=I2#+OFFSET(I2#,,-1)-J2#
效果如下图所示: