告别手工算料:动态数组打造智能BOM替代分析-14

在昨天的文章中,我们通过不断重复“主料缺 → 启用替代料1 → 替代料2 → 替代料3……”的判断链条,逐级推进多级替代分析。系统从主料开始,依次向下穿透,每级基于库存与需求的比对判断是否缺料,并在存在替代关系时自动转入下一级补缺计算,直至资源可用或替代路径耗尽。这一过程完整模拟了企业实际生产中“层层替代、逐级补位”的物料齐套逻辑。

当所有层级的替代分析完成后,意味着我们已得出每一级的缺料状态与可用方案。此时,原始分散在多个工作表中的数据——包括各层级的主料、各级替代料的使用情况、库存占用与最终缺料结果——需要进行统一汇总与结构化整合。

合并数据

为实现最终的数据可视化与报表输出,我们需要将分散在各级净需求工作表中的分析结果进行集中整合。为此,新建一张工作表(如命名为“汇总结果”),通过动态数组函数将第1级至最终级的替代料分析数据纵向堆叠,形成一份结构统一、内容完整的总表,在合适单元格输入以下公式

=VSTACK(TRIMRANGE(第1级净需求!A2:M30000),TRIMRANGE(第2级净需求!A2:M30000),TRIMRANGE(第3级净需求!A2:M30000),TRIMRANGE(‘第4级净需求 ‘!A2:M30000))

告别手工算料:动态数组打造智能BOM替代分析-14

公式说明

VSTACK 函数:将多个具有相同列结构的区域垂直合并为一个连续的数据表,适用于多层级结果的汇总。

TRIMRANGE(range)(裁剪公式):用于清理和标准化每个数据区域,可能包含以下操作:去除空行或无效记录,确保每张表的 A:M 列结构一致,避免合并错位

各参数含义:

第1级净需求!A2:M30000:主料层级的净需求明细(含原始需求、库存、是否缺料等)

第2级净需求!A2:M30000:替代料1的补缺执行情况

第3级净需求!A2:M30000:替代料2的承接与覆盖状态

‘第4级净需求 ‘!A2:M30000:更高层级的替代分析(注意表名含空格需加引号)

实现效果:所有层级的数据按顺序合并,每一行代表某一层级对某一生产任务的处理结果,形成一条完整的“物料替代路径”。

筛选数据

在完成多级净需求数据的合并后,下一步是从整合后的全量数据中精准筛选出最终仍存在缺料的记录,即经过主料及所有替代料(替代料1、2、3…)层层补缺后,依然无法满足需求的物料任务。这些记录将构成最终的“不可替代缺料清单”,是采购、补料或计划调整的核心依据,我们可以用以下函数进行操作:

=LET(A,VSTACK(TRIMRANGE(第1级净需求!A2:M30000),TRIMRANGE(第2级净需求!A2:M30000),TRIMRANGE(第3级净需求!A2:M30000),TRIMRANGE(‘第4级净需求 ‘!A2:M30000)),FILTER(A,(TAKE(A,,-1)<>””)*(INDEX(A,,12)<>0)))

告别手工算料:动态数组打造智能BOM替代分析-14

公式解释:

公式说明

LET(A, …):定义变量 A 为所有层级净需求数据的纵向合并结果,避免重复计算,提升可读性。

VSTACK + TRIMRANGE:同前文,将第1至第4级(或更多)净需求表的数据合并为一个统一数据集,确保结构一致。

TAKE(A,,-1):提取合并后数据的最后一列(即 M 列),通常为“替代料N”字段。

判断条件 (TAKE(A,,-1)<>””) 表示:该行记录的是某一级替代料的使用情况(非主料行)。

INDEX(A,,12):提取第12列(即 L 列,通常为“净需求”列)。

条件 (INDEX(A,,12)<>0) 表示:该行对应的净需求不为零,即仍存在缺料(负数)或有需求未覆盖。

* 连接条件:相当于逻辑“与”(AND),表示同时满足:该行是某一级替代料的处理记录(非主料)该替代层级未能完全覆盖需求(仍有缺口)

最终效果:返回所有“在启用替代料后仍存在欠料”的记录,即系统已穷尽所有可用替代路径,但仍未解决的缺料问题。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

立即咨询 企业版试用 上门服务

请您留言

感谢您的关注,你可留下联系方式,我们将第一时间与您联系。