ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多个表格的sumproduct相加如何实现

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-3 14:04 | 显示全部楼层 |阅读模式
本帖最后由 qmkdtc 于 2019-9-3 15:22 编辑

需求:想汇总城市公司多个项目的相关信息。现在有项目-甲,项目-乙,未来可能还有项目-丙等,现在想把他们对应信息汇总到城市公司的表格中。
在城市公司中,按对应的条件,求和各项目的值,城市公司BD,等于项目-甲的BD+项目-乙的BD,其他以此类推。
目前想法是在城市公司中,对各项目使用sumproduct选取对应的数值,再相加。但是项目很多,且以后会再增加(项目表格名称前端相同),所以想用VBA实现该操作。
求各位大神帮助,万分感谢!!
项目-甲
A B C
D 1 2 3
E 4 5 6
项目-乙
A B C
D 7 8 9
E 8 7
6
城市公司
B C
D 甲的BD+乙的BD 甲的CD+乙的CD
E  甲的BE+乙的BE  甲的CE+乙的CE


模板-希望黄色部分能自动汇总.rar

78.39 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2019-9-3 14:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请上传附件,模拟数据效果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-3 15:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-3 15:40 | 显示全部楼层

你模拟的数据效果呢,黄色区域是计算方式是什么?模拟结果或计算过程。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-4 16:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opel-wong 发表于 2019-9-3 15:40
你模拟的数据效果呢,黄色区域是计算方式是什么?模拟结果或计算过程。

大佬,我修改了一下,标明了数据小伙和计算方式

TA的精华主题

TA的得分主题

发表于 2019-9-4 17:25 | 显示全部楼层
本帖最后由 opel-wong 于 2019-9-4 17:27 编辑
qmkdtc 发表于 2019-9-4 16:06
大佬,我修改了一下,标明了数据小伙和计算方式

按你的要求,汇总包含指定关键字的工作表
只对需操作区域赋值,保留你表中的其它的公式区域。   

用了半小时写代码,希望能帮到你,,

060.png






TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-5 15:20 | 显示全部楼层
opel-wong 发表于 2019-9-4 17:25
按你的要求,汇总包含指定关键字的工作表,
只对需操作区域赋值,保留你表中的其它的公式区域。   

万分感谢大佬!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-5 15:24 | 显示全部楼层
opel-wong 发表于 2019-9-4 17:25
按你的要求,汇总包含指定关键字的工作表,
只对需操作区域赋值,保留你表中的其它的公式区域。   

大佬 我模仿你的代码  想在其他区域做同样的事,为什么显示 下标越界呀
Sub 字典取数()
    Dim arr, AR(), BR(), CR(), DR(), ER(), FR(), i%, mdic$, sht As Worksheet
    Dim m As Long: m = 0: Dim h As Long: h = 0
    Dim d As Object: Set d = CreateObject("Scripting.Dictionary")
    ReDim AR(1 To 13, 1 To 2) '7\19-1
    ReDim BR(1 To 13, 1 To 2) '7\19-2
    ReDim CR(1 To 13, 1 To 2) '7\19-3
   
    ReDim DR(1 To 5, 1 To 2) '22\26-1
    ReDim ER(1 To 5, 1 To 2) '22\26-2
    ReDim FR(1 To 5, 1 To 2) '22\26-3

   
   
    For Each sht In Sheets
    '7\19-----------------------------------------------------------------------------------------
        If InStr(sht.Name, "项目经营看板--") Then
            arr = sht.UsedRange.Value
            For i = 6 To 18
                mdic = VBA.Trim$(arr(i, 4))
                If d.Exists(mdic) Then
                    h = d(mdic)
                    AR(h, 1) = AR(h, 1) + Val(arr(i, 13)): AR(h, 2) = AR(h, 2) + Val(arr(i, 14))
                    BR(h, 1) = BR(h, 1) + Val(arr(i, 17)): BR(h, 2) = BR(h, 2) + Val(arr(i, 18))
                    CR(h, 1) = CR(h, 1) + Val(arr(i, 21)): CR(h, 2) = CR(h, 2) + Val(arr(i, 22))
                Else
                    m = m + 1
                    d(mdic) = m
                    AR(m, 1) = Val(arr(i, 13)): AR(m, 2) = Val(arr(i, 14))
                    BR(m, 1) = Val(arr(i, 17)): BR(m, 2) = Val(arr(i, 18))
                    CR(m, 1) = Val(arr(i, 21)): CR(m, 2) = Val(arr(i, 22))
                End If

            Next
    '22\26-----------------------------------------------------------------------------------------
            For i = 20 To 24 '计算模块的行序号
                mdic = VBA.Trim$(arr(i, 4))
                If d.Exists(mdic) Then
                    h = d(mdic)
                    DR(h, 1) = DR(h, 1) + Val(arr(i, 13)): DR(h, 2) = DR(h, 2) + Val(arr(i, 14))
                    ER(h, 1) = ER(h, 1) + Val(arr(i, 17)): ER(h, 2) = ER(h, 2) + Val(arr(i, 18))
                    FR(h, 1) = FR(h, 1) + Val(arr(i, 21)): FR(h, 2) = FR(h, 2) + Val(arr(i, 22))
                Else
                    m = m + 1
                    d(mdic) = m
                    DR(m, 1) = Val(arr(i, 13)): DR(m, 2) = Val(arr(i, 14))
                    ER(m, 1) = Val(arr(i, 17)): ER(m, 2) = Val(arr(i, 18))
                    FR(m, 1) = Val(arr(i, 21)): FR(m, 2) = Val(arr(i, 22))
                End If
            Next
        End If
    Next
    With Worksheets("城市经营看板")
        .Activate
        .Range("E7:F19,I7:J19,M7:N19").ClearContents '填写区域清空

    '7\19-----------------------------------------------------------------------------------------
        .Range("I7").Resize(13, 2).Value = AR
        .Range("M7").Resize(13, 2).Value = BR
        .Range("Q7").Resize(13, 2).Value = CR
    '22\26-----------------------------------------------------------------------------------------
        .Range("I22").Resize(5, 2).Value = DR
        .Range("M22").Resize(5, 2).Value = ER
        .Range("Q22").Resize(5, 2).Value = FR
        
    End With
    Set d = Nothing: Erase arr: Erase AR: Erase BR: Erase CR: Erase DR: Erase ER: Erase FR

End Sub
aa.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-5 15:38 | 显示全部楼层
opel-wong 发表于 2019-9-4 17:25
按你的要求,汇总包含指定关键字的工作表,
只对需操作区域赋值,保留你表中的其它的公式区域。   

大佬,我模仿你的写了一个,但为什么报错,说下标越界,我看了下,貌似是字典添加新数据时会出现问题。
   '7\19-----------------------------------------------------------------------------------------
        If InStr(sht.Name, "项目经营看板--") Then
         arr = sht.UsedRange.Value
            For i = 6 To 18 '计算模块的行序号
                mdic = VBA.Trim$(arr(i, 4))'???
                If d.Exists(mdic) Then
                    h = d(mdic)
                    AR(h, 1) = AR(h, 1) +Val(arr(i, 13)): AR(h, 2) = AR(h, 2) + Val(arr(i, 14)) '计算模块列号
                    BR(h, 1) = BR(h, 1) +Val(arr(i, 17)): BR(h, 2) = BR(h, 2) + Val(arr(i, 18))
                    CR(h, 1) = CR(h, 1) +Val(arr(i, 21)): CR(h, 2) = CR(h, 2) + Val(arr(i, 22))
                Else
                    m = m + 1
                    d(mdic) = m
                    AR(m, 1) = Val(arr(i, 13)):AR(m, 2) = Val(arr(i, 14))
                    BR(m, 1) = Val(arr(i, 17)):BR(m, 2) = Val(arr(i, 18))
                    CR(m, 1) = Val(arr(i, 21)):CR(m, 2) = Val(arr(i, 22))
                End If
            Next
   '22\26-----------------------------------------------------------------------------------------
            For i = 20 To 24 '计算模块的行序号
                mdic = VBA.Trim$(arr(i, 4))'???
                If d.Exists(mdic) Then
                    h = d(mdic)
                    DR(h, 1) = DR(h, 1) +Val(arr(i, 13)): DR(h, 2) = DR(h, 2) + Val(arr(i, 14)) '计算模块列号
                    ER(h, 1) = ER(h, 1) +Val(arr(i, 17)): ER(h, 2) = ER(h, 2) + Val(arr(i, 18))
                    FR(h, 1) = FR(h, 1) +Val(arr(i, 21)): FR(h, 2) = FR(h, 2) + Val(arr(i, 22))
                Else
                    m = m + 1
                    d(mdic) = m
                    DR(m, 1) = Val(arr(i, 13)):DR(m, 2) = Val(arr(i, 14))
                    ER(m, 1) = Val(arr(i, 17)):ER(m, 2) = Val(arr(i, 18))
                    FR(m, 1) = Val(arr(i, 21)):FR(m, 2) = Val(arr(i, 22))
                End If
            Next
        End If



aa.png

demo.rar

161.83 KB, 下载次数: 3

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 11:00 , Processed in 0.047469 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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