如何在Excel 365中用单公式实现父SKU库存按子SKU规则更新
Excel 365 父/子SKU库存批量计算解决方案
原使用公式=IFERROR(MAP(A2:A1301,LAMBDA(r,MIN(FILTER(B2:B1301,LEFT(A2:A1301,9)=r&":")))),B2:B1301)无法覆盖以下多场景库存计算规则,现提供可满足所有需求的单公式方案:
原始数据示例
| SKU | Quantity |
|---|---|
| 26013004 | 1 |
| 26013004:26013004F | 0 |
| 26013004:26013004H | 0 |
| 26013004:26013004R | 1 |
| 26015002 | 0 |
| 31003002:31003002B | 1 |
| 31003002:31003002T | 1 |
| 31004001 | 0 |
| 31004002 | 0 |
| 31004002:31004002A | 32 |
| 31004002:31004002B | 48 |
| 31005001 | 1 |
| 31005001:31005001A | 3 |
| 31005001:31005001B | 6 |
| 31005002 | 7 |
| 31005002:31005002A | 5 |
| 31005002:31005002B | 4 |
| 31005003 | 7 |
| 31005003:31005003A | 8 |
| 31005003:31005003B | 4 |
需满足的库存规则
- 父SKU库存为0,子SKU库存含0和1 → 父SKU保持0(零件不足无法组装)
- 父SKU库存为0,子SKU库存均≥1 → 父SKU更新为子SKU库存最小值(可组装的最大数量)
- 父SKU库存为0,子SKU库存为32和48 → 父SKU更新为32(取子库存最小值)
- 父SKU库存为1,子SKU库存为3和6 → 父SKU更新为1+3=4(原有库存加可组装数量)
- 父SKU库存为7,子SKU库存最大值为5 → 父SKU保持7(视为数据库差异,优先保留父库存)
最终公式(支持批量溢出)
在任意空白单元格(比如C2)输入以下公式,Excel 365会自动溢出计算所有行:
=MAP(A2:A1301,B2:B1301,LAMBDA(sku,qty, LET( parent_id, IFERROR(LEFT(sku,FIND(":",sku)-1),sku), child_qtys, FILTER(B:B,LEFT(A:A,FIND(":",A:A)-1)=parent_id,0), min_child, IFERROR(MIN(child_qtys),0), max_child, IFERROR(MAX(child_qtys),0), IF( ISNUMBER(FIND(":",sku)), qty, IF( qty>max_child, qty, qty+IF(min_child=0,0,min_child) ) ) ) ))
公式逻辑说明
- 区分父/子SKU:通过
FIND(":",sku)判断是否为子SKU,子SKU直接返回原有库存 - 提取父SKU关联的子库存:用
FILTER筛选出当前父SKU对应的所有子SKU库存 - 关键判断逻辑:
- 如果父SKU原有库存大于子SKU库存的最大值,直接保留父库存(对应规则5)
- 如果子SKU库存最小值为0,父库存保持原有值(对应规则1)
- 其他情况,父库存=原有库存+子SKU库存最小值(对应规则2、3、4)
内容的提问来源于stack exchange,提问作者dyz
相关产品推荐
相关产品推荐

