ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何进行这种类型表格的分类汇总?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-9-28 16:15 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
表格布局为同一个工作簿中多个月表,工作表标签名称为1月,2月到12月表格。格式如图所示:
2020-09-28_160924.png
有两个汇总表,一个为数量总表另一个为货款总表,格式如图所示:
2020-09-28_161140.png
汇总表的表头根据每个月表B列的品类汇总生成到汇总表的第二行。
每个月表中相同品类的商品有重复出现的情况。

每个品类的商品按月生成到总表对应的单元格。

谢谢!
进货表.rar (64.16 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-28 16:51 | 显示全部楼层
在每个分表中的每个品类的数量和货款可以用字典求和,但要汇总到总表中要如何转移过来?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-28 16:58 | 显示全部楼层
使用字典的方法汇总,怎么无法实现,代码要更改哪些地方?


Sub sums()
Dim m, n, k, j, y, arr, i
Dim sht As Worksheet
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
y = Sheet2.Cells(2, Columns.Count).End(xlToLeft).Column

For k = 3 To 14
m = Sheet2.Cells(k, 1)
   
    For Each sht In Sheets
    dc.RemoveAll
   
        If sht.Name = m Then
            arr = sht.[a1].CurrentRegion
            
            For i = 3 To UBound(arr) Step 1
                If Trim(arr(i, 2)) <> "" Then
                    dc(Trim(arr(i, 2))) = dc(Trim(arr(i, 2))) + arr(i, 6)
                End If
            Next i
            For n = 2 To y
            If dc.exists(Trim(sht.Cells(2, n))) Then
            sht.Cells(k, n) = dc(Trim(sht.Cells(2, n)))
            Else
            sht.Cells(k, n) = 0
            End If
            Next n
        End If
        
    Next sht

Next k

TA的精华主题

TA的得分主题

发表于 2020-9-28 17:11 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr(1 To 2)
  4.   Dim ws As Worksheet
  5.   Dim d As Object
  6.   Application.ScreenUpdating = False
  7.   Application.DisplayAlerts = False
  8.   Set d = CreateObject("scripting.dictionary")
  9.   n = 1
  10.   For Each ws In Worksheets
  11.     If ws.Name Like "*月" Then
  12.       With ws
  13.         r = .Cells(.Rows.Count, 2).End(xlUp).Row
  14.         arr = .Range("a3:h" & r)
  15.         For i = 1 To UBound(arr)
  16.           If Not d.exists(arr(i, 2)) Then
  17.             n = n + 1
  18.             d(arr(i, 2)) = n
  19.           End If
  20.         Next
  21.       End With
  22.     End If
  23.   Next
  24.   ReDim crr(1 To 12, 1 To d.Count + 1)
  25.   For k = 1 To 2
  26.     brr(k) = crr
  27.   Next
  28.   For Each ws In Worksheets
  29.     If ws.Name Like "*月" Then
  30.       m = Val(ws.Name)
  31.       With ws
  32.         r = .Cells(.Rows.Count, 2).End(xlUp).Row
  33.         arr = .Range("a3:h" & r)
  34.         For i = 1 To UBound(arr)
  35.           n = d(arr(i, 2))
  36.           brr(1)(m, n) = brr(1)(m, n) + arr(i, 6)
  37.           brr(2)(m, n) = brr(2)(m, n) + arr(i, 7)
  38.         Next
  39.       End With
  40.     End If
  41.   Next
  42.   For k = 1 To 2
  43.     With Worksheets(IIf(k = 1, "2020年总数量", "2020年总货款"))
  44.       .Cells.Clear
  45.       .Range("a2") = "月份"
  46.       .Range("b2").Resize(1, d.Count) = d.keys
  47.       .Range("a3").Resize(13, 1) = Application.Transpose(Array("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "合计"))
  48.       .Range("b3").Resize(UBound(brr(k)), UBound(brr(k), 2)) = brr(k)
  49.       .Range("b15").Resize(1, UBound(brr(k), 2) - 1).FormulaR1C1 = "=SUM(R3C:R[-1]C)"
  50.       With .Range("a2").Resize(UBound(brr(k)) + 2, UBound(brr(k), 2))
  51.         .Borders.LineStyle = xlContinuous
  52.         With .Font
  53.           .Name = "微软雅黑"
  54.           .Size = 11
  55.         End With
  56.       End With
  57.       .Columns(1).Resize(, UBound(brr(k), 2)).AutoFit
  58.         
  59.       With .UsedRange
  60.         .HorizontalAlignment = xlCenter
  61.         .VerticalAlignment = xlCenter
  62.       End With
  63.     End With
  64.   Next
  65. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2020-9-28 17:12 | 显示全部楼层
详见附件。

进货表.rar

73.84 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-28 17:40 | 显示全部楼层

非常感谢褚老师的帮助!

运行的结果有两处存在这样的问题:
Inked2020-09-28_173557_LI.jpg Inked2020-09-28_173612_LI.jpg
9月对应的数据跑到原本所在单元格的右侧去了。

TA的精华主题

TA的得分主题

发表于 2020-9-28 17:51 | 显示全部楼层
修改好了。

进货表.rar

73.91 KB, 下载次数: 16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-9-28 18:12 | 显示全部楼层
请看附件。

a进货表.rar

68.85 KB, 下载次数: 12

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-28 18:51 | 显示全部楼层

辛苦褚老师了!


还有一个小问题:如果两个汇总表的表头一致且包括了所有品类名称,并且事先输入固定下来。这个代码要改哪些地方?

谢谢!



TA的精华主题

TA的得分主题

发表于 2020-9-28 19:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

用字典记录列字段位置,读取分表数据时,先判断列字段是否在总表中,如果在的话,读出字典中保存的列位置,然后逐个写入数组。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-26 08:55 , Processed in 0.046514 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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