Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: bracy

[已解决]BOM分解计算需求

[复制链接]
 楼主| 发表于 2017-5-18 10:51 | 显示全部楼层

非常感谢老师,代码很经典!另外麻烦老师看下后一个需求,谢谢!
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2017-5-24 16:08 | 显示全部楼层

老师,经过导入生产数据使用后发现存在不同零件使用同一规格牌号的材料情况,所以需求子表应该是按规格牌号去除重复并合并数量,麻烦老师更新一下代码,谢谢~

回复

使用道具 举报

发表于 2017-5-24 17:08 | 显示全部楼层
那么只能生成牌号规格与用量了,零件代码跟牌号规格不能匹配的话无法提取。
  1. Sub aaa()
  2. Dim arr, brr, crr(1 To 1000, 1 To 2), i&, j&, d As Object, r&
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = Sheets(1).[a1].CurrentRegion
  5. brr = Sheets(2).[a1].CurrentRegion
  6. For i = 2 To UBound(brr)
  7.   For j = 2 To UBound(arr)
  8.     If arr(j, 1) = brr(i, 1) Then
  9.       If Not d.exists(arr(j, 3)) Then
  10.         r = r + 1
  11.         d(arr(j, 3)) = r
  12.         crr(r, 1) = arr(j, 3)
  13.       End If
  14.       crr(d(arr(j, 3)), 2) = crr(d(arr(j, 3)), 2) + brr(i, 2) * arr(j, 4)
  15.     End If
  16.   Next j
  17. Next i
  18. Sheets(3).[b2].Resize(r, 2) = crr
  19. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-5-26 15:24 | 显示全部楼层

BOM分解计算需求

大灰狼1976 发表于 2017-5-24 17:08
那么只能生成牌号规格与用量了,零件代码跟牌号规格不能匹配的话无法提取。

谢谢老师!就是需要材料的用量,因为存在不同零件共用同一规格牌号材料的情况。
PS.老师能抽时间加个注释吗?想学习一下,谢谢!


回复

使用道具 举报

发表于 2017-5-26 16:21 | 显示全部楼层
前提是你懂字典的用法,不然是不太容易明白的。
  1. Sub aaa()
  2. Dim arr, brr, crr(1 To 1000, 1 To 2), i&, j&, d As Object, r&
  3. Set d = CreateObject("scripting.dictionary") '字典
  4. arr = Sheets(1).[a1].CurrentRegion  '将BOM表数据装入数组
  5. brr = Sheets(2).[a1].CurrentRegion  '将产品需求数量表数据装入数组
  6. For i = 2 To UBound(brr)
  7.   For j = 2 To UBound(arr)
  8.     If arr(j, 1) = brr(i, 1) Then   '产品代号一致时
  9.       If Not d.exists(arr(j, 3)) Then    '如果字典内没有此数据时
  10.         r = r + 1                       '结果数组内行数加1
  11.         d(arr(j, 3)) = r                '将产品代号所在的数组行编号装入字典
  12.         crr(r, 1) = arr(j, 3)          '将牌号规格装入结果数组相应行的第一列
  13.       End If
  14.       crr(d(arr(j, 3)), 2) = crr(d(arr(j, 3)), 2) + brr(i, 2) * arr(j, 4) '将需求数量装入结果数组产品代号对应行的第二列
  15.     End If
  16.   Next j
  17. Next i
  18. Sheets(3).[b2].Resize(r, 2) = crr   '输入至单元格区域
  19. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-6-6 16:38 | 显示全部楼层
大灰狼1976 发表于 2017-5-26 16:21
前提是你懂字典的用法,不然是不太容易明白的。

谢谢老师!另外想问下,如果想在点按钮的时候清除掉前面计算的结果应该用什么语句?现在都是计算一次后手动删除再点。
回复

使用道具 举报

发表于 2017-6-7 12:36 | 显示全部楼层
清除内容的代码为 单元格区域.clearcontents,至于单元格区域需要你自己设定,我根据你的样本表做出来的不一定适用你的正式表格。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 22:46 , Processed in 0.238119 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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