表格BOM分不清自制件采购件,AI写了5个公式,最快的43个字符

Lv.4 核心创作者
🧩表格BOM分不清自制件采购件,AI写了5个公式,最快的43个字符
不少工厂还没上信息化,物料清单就是一张Excel表。计划员排产、采购下单之前,都得先搞清楚一件事:这几百个子件里,哪些是本厂自己做的自制件,哪些是外面买的采购件?
人工的做法,是对着BOM一行行凭经验标。500行标下来眼睛都花了,过两天BOM一改版,又得从头再来一遍。
其实这事一行公式就能解决。
这个子件有没有在父件列里出现过?出现过,说明它自己也挂在别的件下面当"父件",本厂能生产,就是自制件;没出现过,只能外购,就是采购件。
数据结构很简单:A列是父件编码,C列是子件编码,一共517行,G列输出子件属性。下面5个公式,都是这个原理,按速度排好了队。
一、方法1:COUNTIF计数(43字符,速度98)
=IF(COUNTIF(A2:A518,C2:C518)>0,"自制件","采购件")COUNTIF拿C列子件编码到A列父件列里逐个计数,出现次数大于0,说明这个子件同时也是别的行的父件,自制件;等于0,采购件。
有个快速验证的小技巧:把条件里的">0"去掉,公式返回的就是一个数字——有数字,就代表它在父件列那边有;没有就是0。理解了这层,公式就不用死记了。
单函数直数,一步到位,类似向量化,速度当之无愧第一名。
二、方法2:XLOOKUP查找(58字符,速度95)
=IF(ISERROR(XLOOKUP(C2:C518,A2:A518,A2:A518)),"采购件","自制件")这是查找引用的思路:拿C列子件去A列父件里找,查找值是C列,查找区域和返回区域都是A列。
找到了 → 有下层,自制件
找不到(返回错误)→ ISERROR接住,采购件
查找家族的标准写法,可读性最好,就是比COUNTIF略慢一点。
三、方法3:VSTACK堆叠总量对比(107字符,速度85)
=LET(c,C2:C518,s,VSTACK(A2:A518,c),MAP(c,LAMBDA(x,IF(SUMPRODUCT(--(s=x))>COUNTIF(C2:C518,x),"自制件","采购件"))))思路完全不同:把父件列和子件列VSTACK堆成一个总序列,数每个子件在总序列里出现的总次数,跟它在自己这一列(子件列)的出现次数比——多出来的次数,只可能来自父件列,那就是自制件。
这里踩过一个坑,值得单独说:一开始想当然用"总次数大于1"来判断,结果517行里错了一大半。原因是同一个子件会被多个父件引用,它在子件列自己就出现好几次,总次数大于1根本不代表父件列有它。必须跟它自身次数比,这个逻辑才是闭环的。
这个写法字符长、速度也没优势,家族独立的价值大于实用价值,当思维扩展题看。
四、方法4:MAP+MATCH遍历(64字符,速度70)
=MAP(C2:C518,LAMBDA(x,IF(ISNA(MATCH(x,A2:A518,0)),"采购件","自制件")))MAP对C列逐行执行,每行拿MATCH到A列精确查找,ISNA判断没找到就是采购件。逐行加工的好处是以后要加判断条件好扩展,坏处是大数据量下速度垫底。
五、方法5:TEXTJOIN+SEARCH文本定界(94字符,速度60)
=LET(c,C2:C518,t,","&TEXTJOIN(",",,A2:A518)&",",IF(ISNUMBER(SEARCH(","&c&",",t)),"自制件","采购件"))把A列517个父件编码合并成一串逗号分隔的文本,子件编码前后也包上逗号再去搜——定界符防止"1001"误命中"21001"这种包含关系的错判。
硬伤要提醒:TEXTJOIN的结果超过32767字符(大约1800行)直接报错,编码里含逗号也会乱,所以这套只能小表玩玩,思路轻巧但不扛量。
六、五个公式全家福
AI最后把5个方法整理成一张公式汇总表:排名、速度、字符数、公式、精简思路、详细思路、推荐指数、功能限制,一页看全。
方法1为什么是第一名?它是一个单函数的向量化解法,全程不逐行循环,字符也最短。方法5字符也不算长,但TEXTJOIN拼接本身慢,再加上硬伤多,只能排最后。
七、一个说在前面的边界
两态
:自制件、采购件。
委外件识别不出来。
委外件
在系统里通常就归在采购件里,要单独区分,得先给"
委外件
"下一个明确的定义。中小工厂的颗粒度一般没必要细到这一步,先按
两态
走,够用。
最后说一句
以前人工标属性,500行的BOM要标半天;现在一个公式回车,整列瞬间出结果,BOM改成什么样都自动跟着变。
工具是次要的,"子件在父件列出现过,就是自制件"这个判断逻辑才是真正的资产。把它记下来,换什么表格都能用。
关注我,学习生产排程,学习AI知识。
术语解释
文章里出现的技术名词,一句话说清楚:
BOM(Bill of Materials,物料清单):工厂里记录"一个产品由哪些料组成"的表,父件是装出来的成品或半成品,子件是组成它的料。
动态数组公式:一个公式自动向下溢出一整列结果的写法,不用拖填充,数据变了结果跟着变。
XLOOKUP:跨区域查找函数,拿一个值去另一列里找,找到就返回对应内容。
COUNTIF:条件计数函数,统计某个值在一片区域里出现了几次。
VSTACK:把几列数据上下堆成一列的函数,像把几摞纸叠成一摞。
LAMBDA:在公式里临时定义的小函数,MAP每扫到一行就调用它一次。
TEXTJOIN:把一片区域的内容合并成一个字符串,中间可以加分隔符,但有32767字符的上限。
古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者
深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。
#多维表格 #工厂管理 #AI应用
本文由 AI 辅助创作
工具:灵犀专业版
模型:GLM-5.3-Flash 超高