ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多表再汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-13 11:28 | 显示全部楼层 |阅读模式
请大侠们看一看我这个表有没有什么办法汇总,每张表每个类别行不固定,要求汇总金额,先谢了。

多表再汇总.rar

8.7 KB, 下载次数: 46

TA的精华主题

TA的得分主题

发表于 2014-12-13 12:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub cs()
  2. Set dic = CreateObject("Scripting.dictionary")
  3. Dim brr(0 To 999, 0 To 10)
  4. brr(0, 0) = "表名"
  5. For Each sht In Sheets
  6.     If sht.Name <> "汇总" Then
  7.         arr = sht.Range("A1").CurrentRegion
  8.         n = n + 1
  9.         brr(n, 0) = sht.Name
  10.         For i = 2 To UBound(arr)
  11.             If Len(arr(i, 6)) = 0 Then arr(i, 6) = arr(i - 1, 6)
  12.             If dic.exists(arr(i, 6)) Then
  13.                 p = dic(arr(i, 6))
  14.                 brr(n, p) = brr(n, p) + arr(i, 9)
  15.             Else
  16.                 k = k + 1
  17.                 dic(arr(i, 6)) = k
  18.                 brr(0, k) = arr(i, 6)
  19.                 brr(n, k) = arr(i, 9)
  20.             End If
  21.         Next
  22.     End If
  23. Next
  24. With Sheet1.Range("A2")
  25. .CurrentRegion.ClearContents
  26. .Resize(n + 1, k + 1) = brr
  27. End With
  28. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-13 12:54 | 显示全部楼层
"    楼主在设计数据表时,未考虑到充分发挥Excel软件的内置功能,对以后数据的积累、修改、引用和汇总造成了很大困难……
    建议楼主参考下帖附件中的文字说明,修改工作表的设置,首先建立好记录日常所发生数据的“一维数据表”。我们的目的是使用好Excel,实现对数据的管理,而不是制作软件。因此要充分发挥 Excel 自带的强大功能,例如“高级筛选”、“数据透视表”等等,再用函数和代码等方法作为补充,以降低制作和修改难度,提高工作效率。
    以上浅见是个人观点,不代表论坛立场。"

★Excel数据管理的一般规律★    http://club.excelhome.net/thread-287461-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-13 13:08 | 显示全部楼层
cbtaja 发表于 2014-12-13 12:50

大师,无需汇总部分能不能不要?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-13 13:20 | 显示全部楼层
LangQueS 发表于 2014-12-13 12:54
"    楼主在设计数据表时,未考虑到充分发挥Excel软件的内置功能,对以后数据的积累、修改、引用和汇总造成 ...

您的贴子一定会慢慢消化,不过企业那些事儿是积重难返,数据的框架结构不知是哪位爷定的,要改难,只能慢慢改良。

点评

后期处理就要麻烦了  发表于 2014-12-13 13:24

TA的精华主题

TA的得分主题

发表于 2014-12-13 13:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
simpman 发表于 2014-12-13 13:08
大师,无需汇总部分能不能不要?
  1. Sub cbtaja()
  2. Set dic = CreateObject("Scripting.dictionary")
  3. Dim brr(0 To 999, 0 To 10)
  4. brr(0, 0) = "表名"
  5. For Each sht In Sheets
  6.     If sht.Name <> "汇总" Then
  7.         arr = sht.Range("A1").CurrentRegion
  8.         n = n + 1
  9.         brr(n, 0) = sht.Name
  10.         For i = 2 To UBound(arr)
  11.             If Len(arr(i, 6)) = 0 Then arr(i, 6) = arr(i - 1, 6)
  12.             If InStr(1, arr(i, 6), "无需汇总") = 0 Then
  13.                 If dic.exists(arr(i, 6)) Then
  14.                     p = dic(arr(i, 6))
  15.                     brr(n, p) = brr(n, p) + arr(i, 9)
  16.                 Else
  17.                     k = k + 1
  18.                     dic(arr(i, 6)) = k
  19.                     brr(0, k) = arr(i, 6)
  20.                     brr(n, k) = arr(i, 9)
  21.                 End If
  22.             End If
  23.         Next
  24.     End If
  25. Next
  26. With Sheet1.Range("A2")
  27. .CurrentRegion.ClearContents
  28. .Resize(n + 1, k + 1) = brr
  29. End With
  30. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-15 10:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大师再麻烦您一下,表名和灰色部分能不能由手工填写不刷新,汇总部分对应刷新填入,行不行?

多表再汇总.rar

11 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-15 14:15 | 显示全部楼层
cbtaja 发表于 2014-12-13 13:46

请高手帮我看一下,这个怎么改?

TA的精华主题

TA的得分主题

发表于 2014-12-15 17:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
simpman 发表于 2014-12-15 10:34
大师再麻烦您一下,表名和灰色部分能不能由手工填写不刷新,汇总部分对应刷新填入,行不行?
  1. Sub yy()
  2. Sheets("汇总").Activate
  3. Dim df, dj, arr, i&, k&, n&, f$, j$, s$
  4. Set df = CreateObject("Scripting.dictionary")
  5. Set dj = CreateObject("Scripting.dictionary")
  6. For n = 6 To 12
  7.    df(Mid(Cells(2, n), 3)) = n - 5
  8.    dj(Mid(Cells(2, n + 8), 3)) = n - 5
  9. Next
  10. ReDim ar(1 To 999, 1 To 10)
  11. ReDim br(1 To 999, 1 To 10)
  12. For k = 3 To [a3].End(4).Row
  13.    s = Cells(k, 1).Value
  14.    arr = Sheets(s).UsedRange.Value
  15.    For i = 2 To UBound(arr)
  16.       If Len(arr(i, 6)) = 0 Then arr(i, 6) = arr(i - 1, 6)
  17.       If Len(arr(i, 10)) = 0 Then arr(i, 10) = arr(i - 1, 10)
  18.       f = arr(i, 6): j = arr(i, 10)
  19.       If df.exists(f) Then ar(k - 2, df(f)) = ar(k - 2, df(f)) + arr(i, 9)
  20.       If dj.exists(j) Then br(k - 2, dj(j)) = br(k - 2, dj(j)) + arr(i, 13)
  21.    Next
  22. Next
  23. [f3:l1000,n3:t1000] = ""
  24. [f3].Resize(k - 2, df.Count) = ar
  25. [n3].Resize(k - 2, dj.Count) = br
  26. Set df = Nothing
  27. Set dj = Nothing
  28. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-12-15 17:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
simpman 发表于 2014-12-15 10:34
大师再麻烦您一下,表名和灰色部分能不能由手工填写不刷新,汇总部分对应刷新填入,行不行?

参考附件              

多表再汇总.zip

17.1 KB, 下载次数: 38

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2025-1-9 16:19 , Processed in 0.028266 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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