ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
一招顶“一万招”的懒人技巧 Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 141|回复: 18

求完工产品成本对比表的VBA代码:F-B列都是SUMIFS函数,求相应的VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-6-10 15:18 | 显示全部楼层 |阅读模式

完工产品成本对比表VBA代码:F-B列都是SUMIFS函数,求相应的VBA代码

完工产品成本汇总表已知材料费,人工费,制造费,总成本跟数量,求完工产品成本对比表中单个产品的单位材料费,人工费,制造费及数量

例如:F3列=IFERROR(SUMIFS(完工产品成本汇总表!$J:$J,完工产品成本汇总表!$C:$C,F$2,完工产品成本汇总表!$D:$D,$B3,完工产品成本汇总表!$E:$E,$C3,完工产品成本汇总表!$F:$F,$D3,完工产品成本汇总表!$G:$G,$E3)/SUMIFS(完工产品成本汇总表!$I:$I,完工产品成本汇总表!$C:$C,F$2,完工产品成本汇总表!$D:$D,$B3,完工产品成本汇总表!$E:$E,$C3,完工产品成本汇总表!$F:$F,$D3,完工产品成本汇总表!$G:$G,$E3),0)

测算.rar

116.77 KB, 下载次数: 26

相关搜索

TA的精华主题

TA的得分主题

发表于 2021-6-10 16:03 | 显示全部楼层
密密麻麻,鬼画符一样,
不过我核对过了,结果是对的,哈哈哈哈哈
代码如下,供参考:
9969.png

评分

参与人数 1鲜花 +2 收起 理由
chidou168 + 2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-10 16:08 | 显示全部楼层
opel-wong 发表于 2021-6-10 16:03
密密麻麻,鬼画符一样,
不过我核对过了,结果是对的,哈哈哈哈哈
代码如下,供参考:

可以复制出来吗,图片格式我复制不了

TA的精华主题

TA的得分主题

发表于 2021-6-10 16:13 | 显示全部楼层
杨炀 发表于 2021-6-10 16:08
可以复制出来吗,图片格式我复制不了

这几十行代码,我都是一个个写出来的,建议你抄写一遍,有助于提高自己。
每次发完贴之后,自己要有一定的进步,循序渐进,以后自己就可以写代码了。
都是这么过来的,

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-10 17:46 | 显示全部楼层
opel-wong 发表于 2021-6-10 16:13
这几十行代码,我都是一个个写出来的,建议你抄写一遍,有助于提高自己。
每次发完贴之后,自己要有一定 ...

我测算了一下,没有反应哦,就只是算出了数量而已,其他费用都没有哦

TA的精华主题

TA的得分主题

发表于 2021-6-10 18:22 | 显示全部楼层
杨炀 发表于 2021-6-10 17:46
我测算了一下,没有反应哦,就只是算出了数量而已,其他费用都没有哦

把你抄写好代码的附件上传来看看,
你确定没有抄写错?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-10 18:39 | 显示全部楼层
opel-wong 发表于 2021-6-10 18:22
把你抄写好代码的附件上传来看看,
你确定没有抄写错?

Sub 数据汇总()
    Dim arr, i As Long, j As Integer, mStr As String, nStr As String
    Dim d As Object: Set d = CreateObject("Scripting.Dictionary")
    arr = Worksheets("完工产品成本汇总表").UsedRange.Value
    For i = 2 To UBound(arr)
        If Len(arr(i, 1)) > O And Val(arr(i, 8)) > O Then
           mStr = arr(i, 1)
           If Not d.Exists(mStr) Then d(mStr) = Val(arr(i, 8)) Else d(mStr) = d(mStr) + Val(arr(i, 8))
       End If
       If Len(arr(i, 3)) > 0 And Len(arr(i, 4)) > 0 And Len(arr(i, 5)) > 0 And Len(arr(i, 6)) > 0 And Len(arr(i, 7)) > 0 Then
          mStr = arr(i, 4) & "," & arr(i, 5) & "," & arr(i, 6) & "," & arr(i, 7) & ",材料费用," & arr(i, 3)
          If Not d.Exists(mStr) Then d(mStr) = Val(arr(i, 10)) Else d(mStr) = d(mStr) + Val(arr(i, 10))

          mStr = arr(i, 4) & "," & arr(i, 5) & "," & arr(i, 6) & "," & arr(i, 7) & ",人工费用," & arr(i, 3)
          If Not d.Exists(mStr) Then d(mStr) = Val(arr(i, 11)) Else d(mStr) = d(mStr) + Val(arr(i, 11))

          mStr = arr(i, 4) & "," & arr(i, 5) & "," & arr(i, 6) & "," & arr(i, 7) & ",费用," & arr(i, 3)
          If Not d.Exists(mStr) Then d(mStr) = Val(arr(i, 12)) Else d(mStr) = d(mStr) + Val(arr(i, 12))

          mStr = arr(i, 4) & "," & arr(i, 5) & "," & arr(i, 6) & "," & arr(i, 7) & ",计量," & arr(i, 3)
          If Not d.Exists(mStr) Then d(mStr) = Val(arr(i, 9)) Else d(mStr) = d(mStr) + Val(arr(i, 9))
       End If
   Next
   Application.ScreenUpdating = False
   With Worksheets("完工产品成本对比表")
       .Activate
       .Range("F3:BM1048576").ClearContents
       arr = .UsedRange.Value
       For i = 3 To UBound(arr)
          If Len(arr(i, 1)) > O Then
             For j = 54 To 65
                If Len(arr(2, j)) > O Then
                   mStr = arr(2, j) & arr(i, 1)
                   If d.Exists(mStr) Then arr(i, j) = d(mStr)
               End If
          Next
      End If
      If Len(arr(i, 2)) > O And Len(arr(i, 3)) > 0 And Len(arr(i, 4)) > O And Len(arr(i, 5)) > O Then
         For j = 6 To 41
             If Len(arr(2, j)) > O Then
                If Len(arr(1, i)) - 0 Then arr(1, j) = arr(1, j - 1)
                mStr = arr(i, 2) & "," & arr(i, 3) & "," & arr(i, 4) & "," & arr(i, 5) & "," & arr(1, i) & "," & arr(2, j)
                nStr = arr(i, 2) & "," & arr(i, 3) & "," & arr(i, 4) & "," & arr(i, 5) & ",计量," & arr(2, j)
                If d.Exists(mStr) Then arr(i, j) = d(mStr) / d(nStr)
             End If
        Next
     End If
     For j = 42 To 53
         arr(i, j) = Val(arr(i, j - 12)) + Val(arr(i, j - 24)) + Val(arr(i, j - 36))
     Next
Next
UsedRange.Value = arr
End With
Application.ScreenUpdating = True
MsgBox "数据已统计完成!"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-10 18:45 | 显示全部楼层
求完工产品成本对比表的VBA代码:F-B列都是SUMIFS函数,求相应的VBA代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-10 20:09 | 显示全部楼层
opel-wong 发表于 2021-6-10 18:22
把你抄写好代码的附件上传来看看,
你确定没有抄写错?

你看看代码是不是哪里有什么问题
184400z8z6ri3833f6396u.png

TA的精华主题

TA的得分主题

发表于 2021-6-10 21:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,高效办公专列,每天发车

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

GMT+8, 2021-6-13 23:23 , Processed in 0.076169 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2021 Wooffice Inc.

   

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

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

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