ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL 如何自动生成BOM对应关系(生产企业物料父子级关系)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-13 17:28 | 显示全部楼层 |阅读模式
尊敬的前辈们,我是一名汽车零配件生产企业的成本会计,由于ERP软件没有购买制造模块(购价高昂),故在制品管理需要通过手动报产的方式进行,那么,当我完工一个产成品的时候,组成该产成品的半成品需要相应减少,当我制造一个半成品的时候,组成该半成品的原材料需要相应减少,我想要达到的目的是:
车间生产统计每天会提供生产日报表,比如生产产成品A100个,当我在表格中输入A 100个时,我希望在另一边或者另一个工作表格得到100个A需要消耗的半成品清单B和C及数量;
当生产统计提供我B和C的产量时,我在表格中录入B和C的产量,另外一个工作表能生成B和C需要消耗的原材料清单名称及数量;
总之就是物料的一增一减,是需要建立这个对应关系,我上传了一个附件,这个附件就是其中某一个零件的BOM,希望前辈以这个为例子,帮我设计一个报产的模型,谢谢,不胜感激~~~~~~~~~~~~

BOM.zip

9.89 KB, 下载次数: 249

TA的精华主题

TA的得分主题

发表于 2016-4-13 23:48 | 显示全部楼层
本帖最后由 cbtaja 于 2016-4-13 23:57 编辑

BOM.zip (19.76 KB, 下载次数: 261)
代码以楼下的为准。

TA的精华主题

TA的得分主题

发表于 2016-4-13 23:55 | 显示全部楼层
楼上的附件里的代码有一点小问题,修改后如下,就不再另上附件了:
  1. Sub test()
  2. arr = [a1].CurrentRegion.Resize(, 4)
  3. rkwl = [f2]
  4. rksl = [g2]
  5. ReDim brr(1 To UBound(arr), 1 To 2)

  6. Set dic = CreateObject("Scripting.dictionary")
  7. For i = 2 To UBound(arr)
  8.     If rkwl = arr(i, 2) Then
  9.         cj = Val(Replace(arr(i, 1), "-", ""))
  10.         For j = i + 1 To UBound(arr)
  11.             cj1 = Val(Replace(arr(j, 1), "-", ""))
  12.             If cj1 = cj + 1 Then
  13.                 p = p + 1
  14.                 brr(p, 1) = arr(j, 2)
  15.                 brr(p, 2) = arr(j, 4) * rksl '
  16.             Else
  17.                 Exit For
  18.             End If
  19.         Next
  20.         Range("f5", Cells(Rows.Count, 7)).ClearContents
  21.         If p > 0 Then [f5].Resize(p, 2) = brr
  22.         Exit Sub
  23.     End If
  24. Next
  25. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-4-14 08:37 | 显示全部楼层
  1.     Set SH1 = Sheets("Sheet1")
  2.     Set SH2 = Sheets("Sheet2")
  3.     Set SH3 = Sheets("Sheet2")
  4.     SH3.Range("D2:J65536").ClearContents
  5.    
  6.     StrSQL = StrSQL & "SELECT C.入库物料,C.数量,D.物料号 AS 出库物料,ROUND(C.数量*D.BOM用量,4) AS 出库数量,C.父层级,D.层级 FROM ("
  7.     StrSQL = StrSQL & "SELECT A.入库物料,B.物料号,IIF(B.层级='Parent',0,val(mid(B.层级,len(B.层级),1))) AS 父层级,A.数量 FROM ("
  8.     StrSQL = StrSQL & "SELECT 入库物料,数量 FROM [" & SH3.Name & "$A:B]"
  9.     StrSQL = StrSQL & ") AS A,("
  10.     StrSQL = StrSQL & "SELECT 层级,物料号,描述,BOM用量 FROM [" & SH1.Name & "$A:D]"
  11.     StrSQL = StrSQL & ") AS B"
  12.     StrSQL = StrSQL & " WHERE A.入库物料=B.物料号"
  13.     StrSQL = StrSQL & ") AS C LEFT JOIN ("
  14.     StrSQL = StrSQL & "SELECT 层级,物料号,描述,BOM用量 FROM [" & SH1.Name & "$A:D]"
  15.     StrSQL = StrSQL & ") AS D ON C.父层级+1=VAL(MID(D.层级,LEN(D.层级),1))"

  16.     Str_coon = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes;IMEX=1';Data Source =" & ThisWorkbook.FullName     '//OFFICE2007
  17.         Dim CN, RS
  18.         Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  19.         Set RS = CreateObject("adodb.recordset")
  20.         CN.Open Str_coon
  21.         RS.Open StrSQL, CN, 1, 3
  22.         For ICOL = 0 To RS.Fields.Count - 1 '循环所有查询结果的列
  23.             SH3.Cells(1, ICOL + 4) = RS.Fields(ICOL).Name
  24.         Next ICOL
  25.         SH3.Range("D2").CopyFromRecordset RS
  26.         CN.Close  '//关闭ADO连接
  27.         Set RS = Nothing
  28.         Set CN = Nothing  '//释放内存
复制代码

TA的精华主题

TA的得分主题

发表于 2016-4-14 08:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
支持批量查询
物料级别超过9,会出错!

BOM.rar (24.19 KB, 下载次数: 665)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-14 15:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-10-29 22:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-15 06:17 | 显示全部楼层
好复杂, 不是一般人用得来。厉害
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 16:25 , Processed in 0.041907 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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