ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 超难的BOOM表求价格问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-21 22:21 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 讲古派 于 2017-3-21 22:23 编辑

QQ截图20170321222233.png QQ截图20170321222247.png

详见附件

问题.zip

18.45 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-22 11:33 | 显示全部楼层
有没有人能解啊

TA的精华主题

TA的得分主题

发表于 2017-3-22 15:54 | 显示全部楼层

参见附件。

问题.zip

71.21 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-22 17:29 | 显示全部楼层

我的天啊.这么复杂.  我偿试消化一下.

TA的精华主题

TA的得分主题

发表于 2017-3-22 19:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能转为2003或2007版的,真想学一下,谢谢!

TA的精华主题

TA的得分主题

发表于 2017-3-22 19:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
讲古派 发表于 2017-3-22 17:29
我的天啊.这么复杂.  我偿试消化一下.

模块  BOM矩阵转多级
sub aa()

是新写的,其他是原有的

TA的精华主题

TA的得分主题

发表于 2017-3-22 20:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
blackttea1 发表于 2017-3-22 19:20
能转为2003或2007版的,真想学一下,谢谢!

移步:
BOM 大纲排序-自定义函数
http://club.excelhome.net/thread-1175717-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-24 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 讲古派 于 2017-3-24 14:21 编辑
yjh_27 发表于 2017-3-22 19:22
模块  BOM矩阵转多级
sub aa()

知识有限. 还是看不太懂.绕晕了.
我用了最死的方法,
可以求出3级.但3级都已经快绕晕了. 有办法简化吗.
Private Sub CommandButton2_Click()
arr = Range("a1").CurrentRegion
    ReDim brr(5 To UBound(arr)) As Currency
    For k = 5 To UBound(arr)
    brr(k) = arr(k, 8)  第8列是单价
        For j = 13 To UBound(arr, 2) 第13列开始是矩形BOOM表
            If arr(k, 1) = arr(1, j) Then
               For m = 5 To UBound(arr)
                   If arr(m, j) <> "" Then
                      brr(k) = brr(k) + arr(m, j) * arr(m, 8)
                      '--------------------------------------
                      For n = 13 To UBound(arr, 2)
                        If arr(m, 1) = arr(1, n) Then
                          For x = 5 To UBound(arr)
                              If arr(x, n) <> "" Then
                                  brr(k) = brr(k) + arr(x, n) * arr(x, 8)
                                  '-----------------------------------------------
                                    For y = 13 To UBound(arr, 2)
                                        If arr(x, 1) = arr(1, y) Then
                                            For Z = 5 To UBound(arr)
                                               If arr(Z, y) <> "" Then
                                                  brr(k) = brr(k) + arr(Z, y) * arr(Z, 8)
                                               End If
                                           Next
                                        End If
                                    Next
                                    '---------------------------------------------------
                              End If
                          Next
                        End If
                      Next
                      '----------------------------------------
                   End If
               Next
            End If
        Next
    Next
Range("k5:k" & UBound(arr)).Value = Application.WorksheetFunction.Transpose(brr)
Unload Me
End Sub

TA的精华主题

TA的得分主题

发表于 2017-3-24 14:47 | 显示全部楼层
本帖最后由 yjh_27 于 2017-3-28 13:32 编辑
讲古派 发表于 2017-3-24 14:16
知识有限. 还是看不太懂.绕晕了.
我用了最死的方法,
可以求出3级.但3级都已经快绕晕了. 有办法简化吗. ...

对sub aa 注释如下
  1. Sub aa()
  2. '取原始数据
  3. arr = [a5:i20]
  4. brr = [j1:p4]
  5. crr = [j5:p20]
  6. '转换为标准多级BOM
  7. bzrr = BOMMatrix2Multilevel(arr, brr, crr)
  8. '统计价格
  9. cbrr = BOMSum(bzrr, 2, , , , 7, UBound(arr, 2) + 1)
  10. '转换为arr原始顺序
  11. ReDim cb1rr(1 To UBound(cbrr), 1 To 1)
  12. j = UBound(arr, 2) + 3
  13. For i = 1 To UBound(cbrr)
  14.     cb1rr(cbrr(i, j), 1) = cbrr(i, 7)
  15. Next
  16. '输出
  17. Range("h5").Resize(UBound(cb1rr), 1) = cb1rr
  18. End Sub
复制代码


如只是使用,只要会改输入、输出的几行代码即可
如要了解更多可将中间结果(数组)输出到工作表查看。

由于自定义函数要考虑通用,会绕些。
附件03版,增加树形输出

问题.zip

68.55 KB, 下载次数: 22

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-25 11:31 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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