ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5178|回复: 10

[求助] 如何用VBA将树形BOM子件对应最近上层的父件找出来

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-20 12:49 | 显示全部楼层 |阅读模式
请教各位高手,如何用VBA代码将子件对应最近的父件罗列出来。如图!
110.jpg

BOM.zip

9.74 KB, 下载次数: 36

TA的精华主题

TA的得分主题

发表于 2015-11-20 13:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
完全看不懂什么意思

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-20 13:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
funsz 发表于 2015-11-20 13:19
完全看不懂什么意思

层级为0的组件是最顶层成品料号,其下层组件有半成品料号也有原材料料号,黄色部分是我想要的结果,如果通过VBA代码来事项,因为有上万个成品BOM,太麻烦了!谢谢!

TA的精华主题

TA的得分主题

发表于 2015-11-20 15:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-20 16:49 | 显示全部楼层

首先谢谢蓝版了,能得到你的邮件回复是件很荣幸的事,难得的。老师,按您的代码提示以下错误,要怎么更改呢?多谢!
Public Arr, d, k, t
Sub lqxs()
Dim i&, myr&, n&
Set d = CreateObject("scripting.Dictionary")
Application.sgreenupdating = False
[c2:c50000].ClearContents
myr = Cells(Rows.Count, 2).End(xlUp).Row
Arr = Range("a1:b" & myr)
For i = 2 To UBound(Arr)
n = Len(Arr(i, 1))
d(n) = d(n) & i & ","
Next|
k = d.keys: t = d.items
For i = 1 To UBound(k)
Call yy(t(i), i)
Next
MsgBox "ok"
Application.ScreenUpdating = True
End Sub
Sub yu(tt, c)
Dim t1, t2, j&, aa, sj, i&, bb
t1 = Left(t(c - 1), Len(t(c - 1)) - 1) '上一级所在的行
t2 = Left(tt, Len(tt) - 1) '本级所在的行
If InStr(t2, ",") Then
bb = Split(t2, ",")
For j = 0 To UBound(bb)
If InStr(t1, ",") Then
aa = Split(t1, ",")
For i = UBound(aa) To 0 Step -1
If Val(bb(j)) > Val(aa(i)) Then
sj = aa(i) 'sj上一级
Cells(bb(j), 3) = Cells(sj, 2).Value
Exit For
End If
Next
Else
If Val(bb(j)) > Val(t1) Then
sj = t1 'sj-上级;
Cells(bb(j), 3) = Cells(sj, 2).Value
Exit For
End If
End If
Next
Else
sj = t2 - 1: Cells(t2, 3) = Cells(sj, 2).Value
End If
End Sub

2015-11-20_164248.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-21 08:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

已解决:如何用VBA将树形BOM子件对应最近上层的父件找出来

Public Arr, d, k, t
Sub lqxs()
   Dim i&, myr&, n&
    Set d = CreateObject("scripting.Dictionary")
    Application.ScreenUpdating = False
    Range("c2:c500").ClearContents
    myr = Cells(Rows.Count, 2).End(xlUp).Row
    MsgBox myr

    Arr = Range("a1:b" & myr)
    For i = 2 To UBound(Arr)
        n = Len(Arr(i, 1))
        d(n) = d(n) & i & ","
    Next
    k = d.keys: t = d.items
    MsgBox d.Count
    For i = 1 To UBound(k)
        Call yy(t(i), i)
    Next
    MsgBox "ok"
    Application.ScreenUpdating = True
End Sub

Sub yy(tt, c)
    Dim t1, t2, j&, aa, sj, i&, bb
    t1 = VBA.Left(t(c - 1), Len(t(c - 1)) - 1)    '上一级所在的行
    t2 = VBA.Left(tt, Len(tt) - 1)     '本级所在的行
    If InStr(t2, ",") Then
        bb = Split(t2, ",")
        For j = 0 To UBound(bb)
            If InStr(t1, ",") Then
                aa = Split(t1, ",")
                For i = UBound(aa) To 0 Step -1
                    If Val(bb(j)) > Val(aa(i)) Then
                        sj = aa(i)    'sj上一级
                        Cells(bb(j), 3) = Cells(sj, 2).Value
                        Exit For
                    End If
                Next
            Else
                If Val(bb(j)) > Val(t1) Then
                    sj = t1    'sj-上级;
                    Cells(bb(j), 3) = Cells(sj, 2).Value
                    Exit For
                End If
            End If
        Next
    Else
        sj = t2 - 1: Cells(t2, 3) = Cells(sj, 2).Value
    End If
End Sub

已处理,多谢各位高手帮忙!代码如下

11.zip

19.25 KB, 下载次数: 89

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-25 11:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

蓝桥老师好!有以下需求问题请教您!
QQ截图20160125113640.png

BOM cost.zip

71.43 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2019-6-18 20:58 | 显示全部楼层
如果层级以数字1 2 3 4 5形式表示,该如何写?老师

TA的精华主题

TA的得分主题

发表于 2020-4-11 11:52 | 显示全部楼层
liujw_35 发表于 2019-6-18 20:58
如果层级以数字1 2 3 4 5形式表示,该如何写?老师

按你的要求数字表示层级最后有解决吗,同求

TA的精华主题

TA的得分主题

发表于 2022-5-25 20:19 | 显示全部楼层

大师,请帮忙处理一下,表格稍微修改了一下,导致0级下面的物料没有找到0级编码,谢谢!
1653481070.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-14 15:01 , Processed in 0.046059 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表