ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 工作表按日期统计汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-25 11:51 | 显示全部楼层 |阅读模式
本帖最后由 y1983y 于 2024-4-2 08:13 编辑

各位大侠:上午好!


       原表工作表为系统导出清单,需要转换为模板工作表样式,目前采用SUMIFS公式统计,但是数据增多后反应缓慢,目前想采用VBA来实现,请各位大侠帮忙实现,谢谢大家!


       在各位大侠的帮助下,通过自己努力,在不改变模板工作表格式下实现了所要功能,再次谢谢大家!

数据表转换.rar

196.47 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-3-25 11:59 | 显示全部楼层
你这个直接透视表吧,不用代码的,高效、环保。

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:29 | 显示全部楼层
  1. Sub test1() '
  2.   Dim Conn As Object, rs As Object, SQL As String, i As Integer
  3.   
  4.   Set Conn = CreateObject("ADODB.Connection")
  5.   Set rs = CreateObject("ADODB.Recordset")
  6.   Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
  7.   
  8.   Sheet2.Activate
  9.   Cells.ClearContents
  10.   
  11.   SQL = "SELECT * FROM [原表$] WHERE LEN(编码)>0 UNION ALL "
  12.   SQL = SQL & "SELECT 编码,SUM(数量) AS 数量,#" & DateAdd("M", -360, Date) & "# AS 日期 FROM [原表$] WHERE LEN(编码)>0 GROUP BY 编码"
  13.   SQL = "TRANSFORM SUM(数量) SELECT 编码 FROM (" & SQL & ") GROUP BY 编码 PIVOT 日期"
  14.   rs.Open SQL, Conn, 1, 3
  15.   
  16.   With Range("A1")
  17.     For i = 0 To rs.Fields.Count - 1
  18.       .Offset(0, i) = rs.Fields(i).Name
  19.     Next
  20.     .Offset(1).CopyFromRecordset rs
  21.     .Offset(, 1) = "数量"
  22.   End With
  23.   
  24.   rs.Close
  25.   Set rs = Nothing
  26.   Conn.Close
  27.   Set Conn = Nothing
  28. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:30 | 显示全部楼层
数据表转换.7z (131.75 KB, 下载次数: 17)

屏幕截图 2024-03-25 122924.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:32 | 显示全部楼层
Sub 矩形1_Click()
    Set d = CreateObject("scripting.dictionary")
    Set dt = CreateObject("scripting.dictionary")
    arr = Sheets("原表").UsedRange
    Application.ScreenUpdating = False
    Sheets("模板").UsedRange.ClearContents
    ReDim brr(1 To UBound(arr), 1 To UBound(arr))
    r = 1
    For j = 2 To UBound(arr)
        If Not d.exists(arr(j, 1)) Then
            r = r + 1
            brr(r, 1) = arr(j, 1)
            d(arr(j, 1)) = ""
        End If
        d(arr(j, 1) & CDate(arr(j, 3))) = d(arr(j, 1) & CDate(arr(j, 3))) + arr(j, 2)
        dt(arr(j, 3) * 1) = CDate(arr(j, 3))
    Next j
    c = 2
    For j = 1 To dt.Count
        c = c + 1
        brr(1, c) = dt(WorksheetFunction.Small(dt.keys, j))
        For i = 2 To r
            brr(i, c) = d(brr(i, 1) & brr(1, c))
            brr(i, 2) = brr(i, c) + brr(i, 2)
        Next i
    Next j
    brr(1, 1) = "编码"
    brr(1, 2) = "数量"
    [a1].Resize(r, c) = brr
    Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:33 | 显示全部楼层
字典案例供参考。。。。。

数据表转换.zip

124.01 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-25 12:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:52 | 显示全部楼层
附件供参考。。。

数据表转换2.7z

114.88 KB, 下载次数: 10

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-25 12:52 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()  '//2024.3.25
  2.     Dim arr, brr, d
  3.     Application.ScreenUpdating = False
  4.     Application.DisplayAlerts = False
  5.     Set d = CreateObject("scripting.dictionary")
  6.     Set d1 = CreateObject("scripting.dictionary")
  7.     With Sheets("原表")
  8.         r = .Cells(Rows.Count, 1).End(3).Row
  9.         arr = .Range("a1").Resize(r, 3)
  10.         For i = 2 To UBound(arr)
  11.             s1 = CDate(arr(i, 3))
  12.             d1(s1) = ""
  13.             s = arr(i, 1)
  14.             If Not d.exists(s) Then Set d(s) = CreateObject("Scripting.Dictionary")
  15.             d(s)(s1) = d(s)(s1) + arr(i, 2)
  16.         Next
  17.     End With
  18.     t = d1.keys: sort1 t, True
  19.     With Worksheets("模板")
  20.         .UsedRange.Offset(1, 2).Clear
  21.         .[a2].Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys)
  22.         .[c1].Resize(1, d1.Count) = t
  23.         Set Rng = .[a1].Resize(d.Count + 1, 2 + d1.Count)
  24.         arr = Rng.Value
  25.         .[a1].Resize(1, d1.Count + 2).Interior.Color = 49407
  26.         .[a2].Resize(d.Count, 1).Interior.Color = 5296274
  27.         For i = 2 To UBound(arr)
  28.             Sum = 0
  29.             For j = 3 To UBound(arr, 2)
  30.                 s = arr(i, 1)
  31.                 If d.exists(s) Then
  32.                     arr(i, j) = d(s)(arr(1, j))
  33.                     Sum = Sum + arr(i, j)
  34.                 End If
  35.             Next
  36.             arr(i, 2) = Sum
  37.         Next
  38.         With Rng
  39.             .Value = arr
  40.             .Borders.LineStyle = 1
  41.             .HorizontalAlignment = xlCenter
  42.             .VerticalAlignment = xlCenter
  43.             .Columns.AutoFit
  44.             With .Font
  45.                 .Name = "微软雅黑"
  46.                 .Size = 11
  47.             End With
  48.         End With
  49.     End With
  50.     Set d = Nothing
  51.     MsgBox "OK!"
  52. End Sub
复制代码


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

本版积分规则

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

GMT+8, 2024-4-27 21:47 , Processed in 0.053802 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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