使用VBA实现快速梳理产品BOM

77 篇文章 6 订阅
56 篇文章 2 订阅

实例需求:源数据表如左图所示,包含两列:产品编号和类别,其中类别为多级列别列表,使用大于号分隔,类别级别不固定。现在需要按照列表进行拆分,产品编号依次重复,如右图所示。

在这里插入图片描述
示例代码如下。

Sub Demo()
    Dim i As Long, j As Long
    Dim arrData, arrRes, aTxt, sTxt As String
    Dim idCol As New Collection, cateCol As New Collection
    arrData = ActiveSheet.Range("A1").CurrentRegion.Value
    For i = LBound(arrData) To UBound(arrData)
        aTxt = Split(arrData(i, 2), ">")
        sTxt = ""
        For j = LBound(aTxt) To UBound(aTxt)
            idCol.Add arrData(i, 1)
            sTxt = sTxt & ">" & aTxt(j)
            cateCol.Add Mid(sTxt, 2)
        Next j
    Next i
    ReDim arrRes(1 To idCol.Count, 1)
    For i = 1 To idCol.Count
        arrRes(i, 0) = idCol(i)
        arrRes(i, 1) = cateCol(i)
    Next
    Sheets.Add
    Range("A1").Resize(idCol.Count, 2).Value = arrRes
End Sub

【代码解析】
第5行代码将数据加载到数组中。
第6~14行代码循环处理每行数据。
第7行代码将对类别进行拆分。
第9~13行代码循环处理每个级别类别,产品编号和类别分别保存在idCol和cateCol两个Collection对象中。此处也可以使用动态数组实现,使用Collection对象的好处是,可以在指定位置添加(插入)和删除其中的元素,动态数组除了追加之外,插入和删除操作都比较复杂。
第10行代码添加产品编号。
第11行代码逐级组合类别。
第12行代码添加类别。
第15行代码为结果数组分配内存空间。
第16~19行代码将对象变量中的数据转存都数组中。
第20行代码增加一个新工作表用于保存结果数据。
第21行代码将结果输出到工作表中。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的代码,这段VBA代码是用于在Excel中生成一个BOM(Bill of Materials)程序,用于快速采购BOMBOM是指产品的零部件清单,用于记录产品所需的所有零部件及其数量。这段代码的功能是将一个INSERT语句写入到指定的文件中,然后保存该文件。具体的操作步骤如下: 1. 创建一个ADODB.Stream对象,用于写入文本内容。 2. 创建一个ADODB.Stream对象,用于保存文件的字节流。 3. 指定要保存的文件路径。 4. 打开WriteStream对象,并设置字符集为UTF-8,类型为文本。 5. 使用WriteText方法将INSERT语句写入WriteStream对象。 6. 设置WriteStream对象的位置为3。 7. 打开BinSt对象,并设置类型为字节。 8. 将WriteStream对象的内容复制到BinSt对象。 9. 保存BinSt对象的内容到指定的文件路径,并关闭BinSt对象。 10. 关闭WriteStream对象。 11. 清空WriteStream和BinSt对象。 12. 显示一个消息框,提示"test over"。 13. 最后,将屏幕更新设置为True。 这段代码的作用是将INSERT语句写入到指定的文件中,并保存该文件。根据代码中的注释,你需要将"指定一个文件全路径 如:“D:\1.sql”"替换为你想要保存的文件路径。 #### 引用[.reference_title] - *1* [用VBA生成UTF-8无BOM格式的文件](https://blog.csdn.net/ChenMengAngZhi_/article/details/116655811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值