ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求一个数组字典汇总,谢谢。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-8 22:20 | 显示全部楼层 |阅读模式
本帖最后由 马小呆 于 2023-12-10 09:08 编辑

请看附件,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-9 09:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-9 09:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-9 09:44 | 显示全部楼层
需求很奇怪,数量分单表合计,次数又叠加

TA的精华主题

TA的得分主题

发表于 2023-12-9 10:13 | 显示全部楼层
---------------------

编号有点不同

数组字典汇总.rar

28.78 KB, 下载次数: 22

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-9 10:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
沈默00 发表于 2023-12-9 09:44
需求很奇怪,数量分单表合计,次数又叠加

实际就是两个表去重合计件数和数量,然后合计两个表共同出现的次数。

最后把日期范围以外的补在最下面。

TA的精华主题

TA的得分主题

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

不好意思,语言表达能力有点差

TA的精华主题

TA的得分主题

发表于 2023-12-9 10:30 | 显示全部楼层
这个表格,设计的真是牛逼,代码写好测试才发现,表一和表二的结构都不一样的

TA的精华主题

TA的得分主题

发表于 2023-12-9 10:37 | 显示全部楼层
Sub 汇总()
Application.ScreenUpdating = False
Dim ar As Variant
Dim i As Long, r As Long, rs As Long
Dim br(), cr()
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
ReDim br(1 To 100000, 1 To 9)
ReDim cr(1 To 100000, 1 To 9)
With Sheets("汇总")
    ks = .[c3]
    js = .[e3]
    lh = 1
    For Each sh In Sheets(Array("表1", "表2"))
        m = m + 1
        r = sh.Cells(Rows.Count, 2).End(xlUp).Row
        ar = sh.Range("b5:j" & r)
        For i = 2 To UBound(ar)
            If ar(i, 2) <> "" Then
                If IsDate(ar(i, 2)) Then
                    If ar(i, 2) >= ks And ar(i, 2) <= js Then
                        t = d(ar(i, 2))
                        If t = "" Then
                            k = k + 1
                            d(ar(i, 2)) = k
                            t = k
                            br(k, 1) = k
                            br(k, lh + m) = ar(i, 2)
                            If sh.Name = "表1" Then
                                br(k, 4) = ar(i, 3)
                                br(k, 5) = ar(i, 4)
                                br(k, 6) = ar(i, 5)
                            Else
                                br(k, 4) = ar(i, 4)
                                br(k, 5) = ar(i, 6)
                                br(k, 6) = ar(i, 8)
                            End If
                        End If
                        If sh.Name = "表1" Then
                            br(t, lh + m + 5) = br(t, lh + m + 5) + ar(i, 6)
                        Else
                            br(t, lh + m + 5) = br(t, lh + m + 5) + ar(i, 9)
                        End If
                        br(t, 9) = br(t, 9) + 1
                    Else
                        tt = d(ar(i, 2))
                        If tt = "" Then
                            kk = kk + 1
                            dc(ar(i, 2)) = kk
                            tt = kk
                            cr(kk, 1) = kk
                            cr(kk, lh + m) = ar(i, 2)
                            If sh.Name = "表1" Then
                                cr(kk, 4) = ar(i, 3)
                                cr(kk, 5) = ar(i, 4)
                                cr(kk, 6) = ar(i, 5)
                            Else
                                cr(kk, 4) = ar(i, 4)
                                cr(kk, 5) = ar(i, 6)
                                cr(kk, 6) = ar(i, 8)
                            End If
                        End If
                        If sh.Name = "表1" Then
                            cr(tt, lh + m + 5) = cr(tt, lh + m + 5) + ar(i, 6)
                        Else
                            cr(tt, lh + m + 5) = cr(tt, lh + m + 5) + ar(i, 9)
                        End If
                        cr(tt, 9) = cr(tt, 9) + 1
                    End If
                End If
            End If
        Next i
        d.RemoveAll
        dc.RemoveAll
    Next sh
    .UsedRange.Offset(5) = Empty
    .[b6].Resize(k, UBound(br, 2)) = br
    .Cells(k + 7, 2).Resize(kk, UBound(cr, 2)) = cr
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-12-9 10:38 | 显示全部楼层
结果为核对,代码仅供参考
数组字典汇总.rar (37.58 KB, 下载次数: 18)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-21 21:04 , Processed in 0.034092 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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