2025-01-13 11:22:31 +08:00
|
|
|
|
# 思路讲解
|
|
|
|
|
|
2025-05-12 22:27:41 +08:00
|
|
|
|
优先考虑使用 [Excel常用函数](../ERP接口配置/4.0-other/998.Excel常用函数.md) 去解决
|
2025-05-09 22:59:40 +08:00
|
|
|
|
|
2025-01-13 11:22:31 +08:00
|
|
|
|
## 案例一
|
|
|
|
|
|
|
|
|
|
已知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的层级关系,可进行分步处理
|
|
|
|
|
|
|
|
|
|
1. 将多余行删除,删除后结果如下
|
|
|
|
|
|
|
|
|
|
| A | B | C | D |
|
|
|
|
|
| ------------ | --------------- | ----- | ---- |
|
|
|
|
|
| 101006002002 | 701435440201 | 审核 | 0 |
|
|
|
|
|
| + | 201006002002001 | 1 | 1 |
|
|
|
|
|
| ++ | 201006002002002 | 1 | 1 |
|
|
|
|
|
| +++ | 401001001004 | 0.224 | 1 |
|
|
|
|
|
|
|
|
|
|
2. 首先获取母件的层级,使用 IF函数 判断当前单元格是否为母件,如果是母件就编号加一,如果不是母件就不增加编号
|
|
|
|
|
|
|
|
|
|
思路如下:
|
|
|
|
|
|
|
|
|
|
1. 所有编码长度固定,且子件级别最大长度小于编码长度,那么只要单元格长度等于十二的就代表这是个母件
|
|
|
|
|
2. 所有编码长度固定,但子件级别最大长度等于或大于编码长度,那么需要判断当前单元格是否为数字,若是数字则代表这是个母件
|
|
|
|
|
3. 所有编码长度不固定,且编码仅以数字开头,中间掺杂字母,则判断当前单元格内容的第一个字符是否为数字,若是数字则代表这个是母件
|
|
|
|
|
4. 所有编码长度不固定,开头内容不固定,仅可确保不是以加号开头,则判断当前单元格内容的第一个字符是否为加号,若不是加号则代表这个是母件
|
|
|
|
|
|
|
|
|
|
案例公式:=IF(ISNUMBER(VALUE('母件结构表-多阶'!A3)),A2+1,A2)
|
|
|
|
|
|
|
|
|
|
**说明**:这种方式仅能获取到当前BOM的编号
|
|
|
|
|
|
|
|
|
|
3. 其次获取子件的层级,参考上一步的思路,在判断出其不是母件的情况下,根据子件级别输出当前的BOM层级编号
|
|
|
|
|
|
|
|
|
|
思路如下:
|
|
|
|
|
|
|
|
|
|
1. 长度为1,直接输出当前的层级编号即可
|
|
|
|
|
|
|
|
|
|
2. 长度为2及以上,层级编号不能盲目累加,需考虑如下情况,应判断前一层级的编号是否相同,若相同则代表子件处于相同层级下,可进行累加,若不相同,则需从一开始重新累加
|
|
|
|
|
|
|
|
|
|
| 层级 | 编码 |
|
|
|
|
|
| ---- | --------------- |
|
|
|
|
|
| | 101101001001 |
|
|
|
|
|
| + | 201101001001001 |
|
|
|
|
|
| ++ | 201101001001002 |
|
|
|
|
|
| +++ | 201101001001004 |
|
|
|
|
|
| + | 201101001001005 |
|
|
|
|
|
| ++ | 201101001001007 |
|
|
|
|
|
|
|
|
|
|
案例公式:`=IF(ISNUMBER(VALUE('母件结构表-多阶'!A3)),0,IF(A2<>A3,0,IF((LEN('母件结构表-多阶'!A3)=1),B2+1,B2)))`
|
|
|
|
|
|
|
|
|
|
**说明**:每个层级需要单独计算
|
|
|
|
|
|
|
|
|
|
4. 所有层级全部处理完成后,进行合并即可
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
案例公式:`=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))))))))))`
|
|
|
|
|
|
|
|
|
|
5. 输出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的层级关系,可进行分步处理
|
|
|
|
|
|
|
|
|
|
1. 首先获取母件的层级,使用 IF函数 判断当前单元格是否为母件,如果是母件就编号加一,如果不是母件就不增加编号
|
|
|
|
|
|
|
|
|
|
思路如下:
|
|
|
|
|
|
|
|
|
|
1. 如果单元格内容的值等于0,说明是母件
|
|
|
|
|
2. 如果单元格内容长度为1,说明是母件
|
|
|
|
|
|
|
|
|
|
案例公式:=IF(LEN(BOM多级展开!A5)=1,SUMPRODUCT((LEN(BOM多级展开!$A$2:A5)=1)*1)-1,A3)
|
|
|
|
|
|
|
|
|
|
2. 其次获取子件的层级,思路与[案例一](#案例一)的第三步大致相同,此处略
|
|
|
|
|
|
|
|
|
|
3. 所有层级全部处理完成后,进行合并即可
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
2025-05-09 22:59:40 +08:00
|
|
|
|
4. 输出BOM导入清单
|