5.3 KiB
思路讲解
优先考虑使用 Excel常用函数 去解决
案例一
已知BOM结构如下
A | B | C | D |
---|---|---|---|
母件编码 | 母件代号 | 状态 | 母件损耗率 |
101006002002 | 701435440201 | 审核 | 0 |
级别 | 子件编码 | 基本用量 | 基础数量 |
+ | 201006002002001 | 1 | 1 |
++ | 201006002002002 | 1 | 1 |
+++ | 401001001004 | 0.224 | 1 |
想要的结果如下
A | B |
---|---|
层级 | 编码 |
0 | 101006002002 |
0.1 | 201006002002001 |
0.1.1 | 201006002002002 |
0.1.1.1 | 401001001004 |
母件编码与子件级别共同在A列,要获取BOM的层级关系,可进行分步处理
-
将多余行删除,删除后结果如下
A B C D 101006002002 701435440201 审核 0 + 201006002002001 1 1 ++ 201006002002002 1 1 +++ 401001001004 0.224 1 -
首先获取母件的层级,使用 IF函数 判断当前单元格是否为母件,如果是母件就编号加一,如果不是母件就不增加编号
思路如下:
- 所有编码长度固定,且子件级别最大长度小于编码长度,那么只要单元格长度等于十二的就代表这是个母件
- 所有编码长度固定,但子件级别最大长度等于或大于编码长度,那么需要判断当前单元格是否为数字,若是数字则代表这是个母件
- 所有编码长度不固定,且编码仅以数字开头,中间掺杂字母,则判断当前单元格内容的第一个字符是否为数字,若是数字则代表这个是母件
- 所有编码长度不固定,开头内容不固定,仅可确保不是以加号开头,则判断当前单元格内容的第一个字符是否为加号,若不是加号则代表这个是母件
案例公式:=IF(ISNUMBER(VALUE('母件结构表-多阶'!A3)),A2+1,A2)
说明:这种方式仅能获取到当前BOM的编号
-
其次获取子件的层级,参考上一步的思路,在判断出其不是母件的情况下,根据子件级别输出当前的BOM层级编号
思路如下:
-
长度为1,直接输出当前的层级编号即可
-
长度为2及以上,层级编号不能盲目累加,需考虑如下情况,应判断前一层级的编号是否相同,若相同则代表子件处于相同层级下,可进行累加,若不相同,则需从一开始重新累加
层级 编码 101101001001 + 201101001001001 ++ 201101001001002 +++ 201101001001004 + 201101001001005 ++ 201101001001007
案例公式:
=IF(ISNUMBER(VALUE('母件结构表-多阶'!A3)),0,IF(A2<>A3,0,IF((LEN('母件结构表-多阶'!A3)=1),B2+1,B2)))
说明:每个层级需要单独计算
-
-
所有层级全部处理完成后,进行合并即可
案例公式:
=IF(K2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2&"."&G2&"."&H2&"."&I2&"."&J2&"."&K2,IF(J2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2&"."&G2&"."&H2&"."&I2&"."&J2,IF(I2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2&"."&G2&"."&H2&"."&I2,IF(H2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2&"."&G2&"."&H2,IF(G2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2&"."&G2,IF(F2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2&"."&F2,IF(E2<>0,A2&"."&B2&"."&C2&"."&D2&"."&E2,IF(D2<>0,A2&"."&B2&"."&C2&"."&D2,IF(C2<>0,A2&"."&B2&"."&C2,IF(B2<>0,A2&"."&B2,A2))))))))))
-
输出BOM导入清单
案例二
已知BOM结构如下
A | B |
---|---|
层级 | 编码 |
0 | 02.06.03.00003 |
.1 | 02.02.02.00082 |
..2 | 03.02.07.00059 |
..2 | 05.02.01.00008 |
0 | 02.06.03.00004 |
.1 | 02.02.02.00083 |
..2 | 03.02.07.00059 |
..2 | 05.02.01.00009 |
想要的结果如下
A | B |
---|---|
层级 | 编码 |
0 | 02.06.03.00003 |
0.1 | 02.02.02.00082 |
0.1.1 | 03.02.07.00059 |
0.1.2 | 05.02.01.00008 |
1 | 02.06.03.00004 |
1.1 | 02.02.02.00083 |
1.1.1 | 03.02.07.00059 |
1.1.2 | 05.02.01.00009 |
层级都在A列,要获取BOM的层级关系,可进行分步处理
-
首先获取母件的层级,使用 IF函数 判断当前单元格是否为母件,如果是母件就编号加一,如果不是母件就不增加编号
思路如下:
- 如果单元格内容的值等于0,说明是母件
- 如果单元格内容长度为1,说明是母件
案例公式:=IF(LEN(BOM多级展开!A5)=1,SUMPRODUCT((LEN(BOM多级展开!$A$2:A5)=1)*1)-1,A3)
-
其次获取子件的层级,思路与案例一的第三步大致相同,此处略
-
所有层级全部处理完成后,进行合并即可
-
输出BOM导入清单