ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 复杂的多表汇总(难度有点大,做出来有分加哦)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-17 13:43 | 显示全部楼层
本帖已被收录到知识树中,索引项:多表合并和汇总
本帖最后由 libo5563 于 2019-5-17 13:44 编辑

VBA不会,power query做一个,虽然是很早的提问了,但题目有点意思,思路就是3个4维的表格合并为一张一维表格再透视,做的时候才发现列的顺序和列的数量不固定,完全用power query将3张数据表合在一个表里做转换 目前M 语言的功力还达不到,只好手动转换每张数据表再合并,当有新的月份增加,及产品再有增加时还得到pq里调整,有点遗憾。

销量汇总.rar

42.04 KB, 下载次数: 105

TA的精华主题

TA的得分主题

发表于 2019-5-17 16:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 爱吃蜂蜜的狼 于 2019-5-17 16:43 编辑
  1. Sub huizong()
  2. Dim sh As Worksheet, k, k1, ar(), r(), rr()
  3. k1 = Sheet1.Range("c:c").Find("*", , , , , xlPrevious).Row
  4. '=====================将总表中的省份和销售网点写书数组arr中
  5. Sheet1.Range("d4:ai" & k1) = ""
  6. arr = Sheet1.Range("b4:c" & k1)
  7. For i = 1 To k1 - 3
  8.       If arr(i, 1) = "" Then
  9.       arr(i, 1) = arr(i - 1, 1)
  10.       arr(i, 2) = arr(i, 1) & arr(i, 2)
  11.       Else
  12.       arr(i, 2) = arr(i, 1) & arr(i, 2)
  13.       End If
  14. Next
  15. '======================将总表中的表头写入数组arr1中
  16. arr1 = Sheet1.Range("d2:ai3")
  17. For ii = 1 To UBound(arr1, 2)
  18.       If arr1(1, ii) = "" Then
  19.       arr1(1, ii) = arr1(1, ii - 1)
  20.       arr1(2, ii) = arr1(1, ii) & arr1(2, ii)
  21.       Else
  22.       arr1(2, ii) = arr1(1, ii) & arr1(2, ii)
  23.       End If
  24. Next
  25. '=======================定义数组ar大小与总表中需要输入的单元格范围相同
  26. ReDim ar(1 To k1 - 3, 1 To 32)
  27. '==============遍历工作簿的所有工作表(For Each sh In ThisWorkbook.Sheets)
  28. For Each sh In ThisWorkbook.Sheets
  29. '==============将非总表的省份和销售网点写入数组r,表头写入数组rr
  30.        If sh.Name <> "总表" Then
  31.           k = sh.Range("c:c").Find("*", , , , , xlPrevious).Row
  32.           k2 = sh.Range("3:3").Find("*", , , , , xlPrevious).Column
  33.           ReDim r(1 To k - 3, 1 To 2)
  34.           ReDim rr(1 To 2, 1 To k2 - 3)
  35.           r = sh.Range("b4:c" & k)
  36.           rr = sh.Range(sh.Cells(2, 4), sh.Cells(3, k2))
  37.           For i1 = 1 To UBound(r)
  38.                 If r(i1, 1) = "" Then
  39.                    r(i1, 1) = r(i1 - 1, 1)
  40.                    r(i1, 2) = r(i1, 1) & r(i1, 2)
  41.                    Else
  42.                    r(i1, 2) = r(i1, 1) & r(i1, 2)
  43.                 End If
  44.           Next
  45.           For i2 = 1 To UBound(rr, 2)
  46.                 If rr(1, i2) = "" Then
  47.                    rr(1, i2) = rr(1, i2 - 1)
  48.                    rr(2, i2) = rr(1, i2) & rr(2, i2)
  49.                    Else
  50.                    rr(2, i2) = rr(1, i2) & rr(2, i2)
  51.                 End If
  52.           Next
  53. '======================将符合要求的表的内容写入数组rrr()中
  54.           rrr = sh.Range(sh.Cells(4, 4), sh.Cells(k, k2))
  55. '=======以下通过4个循环的嵌套分别对比总表省份、销售网点、表头的编号、颜色
  56.           For i3 = 1 To UBound(arr)
  57.                 For i4 = 1 To UBound(r)
  58.                       If arr(i3, 2) = r(i4, 2) Then
  59.                          For i5 = 1 To UBound(arr1, 2)
  60.                                For i6 = 1 To UBound(rr, 2)
  61.                                      If arr1(2, i5) = rr(2, i6) Then
  62. '===========将符合要求的数据进行累加写如事先声明号的数组ar数组中
  63.                                         ar(i3, i5) = ar(i3, i5) + rrr(i4, i6)
  64.                                       
  65.                                      End If
  66.                                Next
  67.                          Next
  68.                       End If
  69.                 Next
  70.           Next
  71.        End If
  72. Next
  73. '=遍历完成所有的工作表后进行整体赋值(事先声明的数组与总表的区域单元格大小相同)
  74. Sheet1.Range("d4:ai" & k1) = ar
  75. End Sub
复制代码


销量汇总.zip

60.23 KB, 下载次数: 88

TA的精华主题

TA的得分主题

发表于 2019-5-17 17:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-5-4 20:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-5-4 20:03 | 显示全部楼层
ccwan 发表于 2010-1-21 08:34
我的代码其实很好理解,就是一般思路,一行行、一列列比对。
希望我的注释不会让大家糊涂了。

这个代码复制时是要把中文部份删除了吗

TA的精华主题

TA的得分主题

发表于 2020-5-4 20:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-9 22:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-9 23:09 | 显示全部楼层
有没有人试试,预先在模板上填上+-*/等运算符,按模板上的运算符进行汇总,而不是简单的累加?

TA的精华主题

TA的得分主题

发表于 2020-6-10 08:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-12 09:03 | 显示全部楼层
能否做到在总表中不事先设定表头,通过代码遍历除总表以外的所有工作表,自动将所有类型的表头写入总表表头再行汇总。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 01:56 , Processed in 0.046197 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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