Files
WorkNote/SanPinPLM/简略教程/BOM清单转换.md
2025-07-07 15:09:46 +08:00

128 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 思路讲解
优先考虑使用 [Excel常用函数](../相关操作/4.0-other/997.Excel常用函数.md) 去解决
## 案例一
已知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. 所有层级全部处理完成后,进行合并即可
![image-20240731141114790](assets/image-20240731141114790.png)
案例公式:`=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. 所有层级全部处理完成后,进行合并即可
![image-20240731142449950](assets/image-20240731142449950.png)
4. 输出BOM导入清单