ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请求老师的帮助,关于从多个工作表中汇总数据到单表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-11 00:02 | 显示全部楼层 |阅读模式
本帖最后由 aloreg 于 2020-3-11 00:18 编辑

各位老师好,小弟在日常工作中处理Excel数据汇总中遇到了难题,想请各位老师指点,感激不尽!
文件描述:两个工作簿,一个为“各省数据”,里面根据不同的省份分了多个工作表;另一个为“汇总”,只有一张表;(如图)

各省数据表

各省数据表

汇总表

汇总表

操作描述:现在要将“各省数据”里面的明细按照单项汇总到“汇总”表中,比如
问题描述:(1)在数据表(各省数据)中垂直纵列的数据,汇总到“汇总表”里面要变为水平方向排列;
(2)”各省数据表“中各个工作表中的数据都要汇总到”汇总表“内;
(3)数据表中纵列单项的数据按照1月、2月、3月的规律循环,对应着汇总表里面水平的三个表格(如图);也就是说汇总表里面,每一行的数据,是数据表中对应单项的纵列的汇集;(如图)
Snipaste_2020-03-10_23-31-16.png
(4)汇总表里面,希望能够根据下拉菜单(A1),切换不同的单项统计显示;
(5)各省数据表内的数据会按照时间定期增加,如何实现定期将其数据添加到“汇总表”内?
以上问题,老师们可以给我提出一些帮助吗?谢谢! test.zip (25.16 KB, 下载次数: 11)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-11 00:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附上文件包,谢谢

test.zip

25.16 KB, 下载次数: 4

文件

TA的精华主题

TA的得分主题

发表于 2020-3-11 08:11 | 显示全部楼层
aloreg 发表于 2020-3-11 00:17
附上文件包,谢谢

这个,从技术上来说不难,用数组,字典,即可以实现。但是,从实际分析,代码量蛮大的,真的需要点时间。
看看谁有空帮你写写吧,

TA的精华主题

TA的得分主题

发表于 2020-3-11 08:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-11 08:32 | 显示全部楼层
确实是个数组+字典的典型案例,只是稍微麻烦一些,先留个足印吧,稍后看看再说

TA的精华主题

TA的得分主题

发表于 2020-3-11 08:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-11 11:00 | 显示全部楼层
VBA学习中, 勉强拼凑一个

test.rar

39.33 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-11 13:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-11 13:56 | 显示全部楼层
不知道为什么 发表于 2020-3-11 08:25
比较好奇,你的销量  和 销售量 是什么区别?

抱歉是我没写清楚,其实“销售量”指的是通过个人销售的数量

TA的精华主题

TA的得分主题

发表于 2020-3-11 21:44 | 显示全部楼层
Sub test()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Set sh = ThisWorkbook.Worksheets(1)
If sh.[a1] = "销量" Then
    y = 3
ElseIf sh.[a1] = "销售金额" Then
    y = 7
ElseIf sh.[a1] = "销售量" Then
    y = 8
End If
sh.Range("b3:ab6") = Empty
ar = sh.Range("a1:ab6")
For j = 2 To UBound(ar, 2)
    If Trim(ar(1, j)) = "" Then ar(1, j) = ar(1, j - 1)
Next j
For j = 2 To UBound(ar, 2)
    If Trim(ar(1, j)) <> "" And Trim(ar(2, j)) <> "" Then
        d(Trim(ar(1, j)) & "|" & Trim(ar(2, j))) = j
    End If
Next j
For i = 3 To UBound(ar)
    If Trim(ar(i, 1)) <> "" Then
        d(Trim(ar(i, 1))) = i
    End If
Next i
f = Dir(ThisWorkbook.Path & "\各省数据.XLSX")
If f <> "" Then
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & f, 0)
    For Each sht In wb.Worksheets
        br = sht.UsedRange
        For i = 2 To UBound(br)
            m = d(Trim(br(i, 1)))
            n = d(sht.Name & "|" & Trim(br(i, 2)))
            If n <> "" And m <> "" Then
                ar(m, n) = ar(m, n) + br(i, y)
            End If
        Next i
    Next sht
    wb.Close False
End If
sh.Range("a1:ab6") = ar
MsgBox "ok!"
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 02:12 , Processed in 0.049859 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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