如何在Excel库存表中创建按产品独立的Override覆盖记录
实现按产品独立的库存覆盖(Override)功能
先调整出入库表结构
在你的Table3(出入库记录表)里新增两列:
- Triggers:需要覆盖某产品库存时,在对应行输入
override(保持大小写统一即可) - Override Qty:仅在Triggers列为
override时,填入该产品盘点后的实际库存数
汇总表公式实现
方法1:兼容旧版Excel(无LAMBDA支持)
替换你当前的汇总公式(假设产品名称在汇总表的B6单元格):
=IF(LEN(B6)=0,"---", LET( prod, B6, last_override_row, MAX(IF((Table3[Colloquial]=prod)*(Table3[Triggers]="override"),ROW(Table3[Triggers]),0)), override_qty, IF(last_override_row>0,XLOOKUP(prod,Table3[Colloquial],Table3[Override Qty],"",0,1),0), post_sum, SUMIFS(Table3[Qty Received],Table3[Colloquial],prod,Table3[#All],">"&last_override_row), override_qty + post_sum ) )
如果你的Excel版本不支持LET,使用拆分版公式:
=IF(LEN(B6)=0,"---", IF(MAX(IF((Table3[Colloquial]=B6)*(Table3[Triggers]="override"),ROW(Table3[Triggers]),0))>0, XLOOKUP(B6,Table3[Colloquial],Table3[Override Qty],"",0,1) + SUMIFS(Table3[Qty Received],Table3[Colloquial],B6,Table3[#All],">"&MAX(IF((Table3[Colloquial]=B6)*(Table3[Triggers]="override"),ROW(Table3[Triggers]),0))), SUMIFS(Table3[Qty Received],Table3[Colloquial],B6) ) )
公式逻辑:
last_override_row:定位当前产品最新的override标记所在行号override_qty:提取该最新覆盖记录的实际库存数post_sum:计算覆盖行之后,该产品所有出入库的总和(注意:出库记录要填负数,比如出库3个苹果填-3,SUM时会自动扣减库存)- 最终库存=覆盖的实际库存 + 后续出入库总和
方法2:新版Excel 365/2021(用LAMBDA封装)
将逻辑封装为自定义函数,方便复用维护:
- 打开「公式」→「名称管理器」,新建名称
InventoryOverride,引用位置填入:
=LAMBDA(product, LET( prod_data, FILTER(Table3, Table3[Colloquial]=product), overrides, FILTER(prod_data, prod_data[Triggers]="override"), last_override, IFERROR(TAKE(overrides,-1),""), start_qty, IF(last_override<>"", last_override[Override Qty], 0), post_override_data, IF(last_override<>"", FILTER(prod_data, ROW(prod_data)>ROW(last_override)), prod_data), start_qty + SUM(post_override_data[Qty Received]) ) )
- 在汇总表单元格直接调用函数:
=IF(LEN(B6)=0,"---",InventoryOverride(B6))
优势:
- 逻辑模块化,后续修改规则只需调整LAMBDA函数
- 自动处理无覆盖记录的情况,直接计算全量出入库
核心注意点
- 出库记录必须用负数录入,否则无法正确扣减库存
override标记要和对应产品在同一行,确保匹配准确- 再次覆盖时,直接在后续行新增
override标记和实际库存,旧记录会自动被忽略(公式默认取最新覆盖行)
内容的提问来源于stack exchange,提问作者jfwork
相关产品推荐
相关产品推荐

