Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2760|回复: 4

[已解决]对另一工作簿内所有的工作表进行多条件求和

[复制链接]
发表于 2015-9-29 18:33 | 显示全部楼层 |阅读模式
多个多条件求和(见附件),请求各位VBA高手帮助,麻烦了、辛苦了,谢谢!
请教:多条件求和.zip (6.19 KB, 下载次数: 15)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-9-29 19:43 | 显示全部楼层
你这差不多是让人帮你把工作干完了。
回复

使用道具 举报

发表于 2015-9-30 11:18 | 显示全部楼层
  1. Sub 求和()
  2.     On Error Resume Next
  3.     Dim wb As Workbook, sh As Worksheet
  4.     Set wb = Workbooks.Open(ThisWorkbook.Path & "\多条件求和数据源.xls")
  5.     Set wb = Workbooks("多条件求和数据源.xls")
  6.     On Error GoTo 0
  7.     Set d1 = CreateObject("scripting.dictionary")
  8.     Set d2 = CreateObject("scripting.dictionary")
  9.     Set d3 = CreateObject("scripting.dictionary")
  10.     Set d4 = CreateObject("scripting.dictionary")
  11.     Set d5 = CreateObject("scripting.dictionary")
  12.     For Each sh In wb.Worksheets
  13.         arr = sh.[a1].CurrentRegion
  14.         For i = 2 To UBound(arr)
  15.             If arr(i, 2) = "" Then arr(i, 2) = arr(i - 1, 2)    '用上一格内容填齐空格部分(编码、名称、部门)
  16.             If arr(i, 3) = "" Then arr(i, 3) = arr(i - 1, 3)
  17.             If arr(i, 7) = "" Then arr(i, 7) = arr(i - 1, 7)
  18.             je = arr(i, 6)     '金额
  19.             
  20.             bm = arr(i, 7): lb = "类别" & arr(i, 4) '部门、类别
  21.             k1 = bm & lb       '部门+类别
  22.             d1(k1) = d1(k1) + je
  23.             If arr(i, 8) = "√" Then d2(k1) = d2(k1) + je
  24.             
  25.             mx = arr(i, 5)   '明细
  26.             k3 = bm & mx
  27.             d3(k3) = d3(k3) + je
  28.             If arr(i, 8) = "√" Then d4(k3) = d4(k3) + je
  29.             
  30.             k5 = arr(i, 2) & arr(i, 4) '编码+大类
  31.             d5(k5) = d5(k5) + je
  32.         Next
  33.     Next
  34.     wb.Close False
  35.     For m = 1 To 5
  36.         Set sh = ThisWorkbook.Sheets(m)
  37.         brr = sh.[a1].CurrentRegion
  38.         For i = 3 To UBound(brr)
  39.             p = IIf(m = 5, 3, 2)      '第五张表从第三列开始填,其他从第二列开始
  40.             For j = p To UBound(brr, 2)
  41.                 k = brr(i, 1) & brr(2, j)
  42.                 If m = 1 Then brr(i, j) = d1(k)
  43.                 If m = 2 Then brr(i, j) = d2(k)
  44.                 If m = 3 Then brr(i, j) = d3(k)
  45.                 If m = 4 Then brr(i, j) = d4(k)
  46.                 If m = 5 Then brr(i, j) = d5(k)
  47.             Next
  48.         Next
  49.         sh.[a1].CurrentRegion = brr
  50.     Next
  51. End Sub
复制代码
回复

使用道具 举报

发表于 2015-9-30 11:19 | 显示全部楼层    本楼为最佳答案   
请看附件。

多条件求和.rar

16.36 KB, 下载次数: 59

回复

使用道具 举报

 楼主| 发表于 2015-9-30 11:44 | 显示全部楼层
grf1973 发表于 2015-9-30 11:19
请看附件。

太感谢太神奇了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:08 , Processed in 0.415042 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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