ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教分类汇总的问题!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-4 23:20 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
想达到这样的效果:分类统计满足两个条件的数据,主要是最终的数据写入格式比较特殊,请求大佬的帮助,谢谢!
QQ截图20230204231809.png

工作簿2.zip

23.12 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2023-2-5 07:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub testg()
    Set d = CreateObject("scripting.dictionary")
    arr = ActiveSheet.UsedRange
    For j = 2 To UBound(arr)
        For i = 3 To 6
            If Not d.exists(arr(j, 1) & arr(1, i)) Then
                Set d(arr(j, 1) & arr(1, i)) = CreateObject("scripting.dictionary")
            End If
            d(arr(j, 1) & arr(1, i))(arr(j, i)) = d(arr(j, 1) & arr(1, i))(arr(j, i)) + 1
        Next i
    Next j
    For j = 2 To UBound(arr)
        If Len(arr(j, 7)) > 0 Then
            For i = 8 To 10
                str1 = ""
                For Each k In d(arr(j, 7) & arr(1, i)).keys
                    str1 = str1 & "-" & k & d(arr(j, 7) & arr(1, i))(k)
                Next k
                arr(j, i) = Mid(str1, 2)
            Next i
        End If
    Next j
    ActiveSheet.UsedRange = arr
End Sub

TA的精华主题

TA的得分主题

发表于 2023-2-5 07:27 | 显示全部楼层
供参考。。。。。

工作簿2.zip

30.49 KB, 下载次数: 13

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-5 11:42 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-5 12:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
准提部林 发表于 2023-2-5 11:42
選項有幾种?? ABCDE*
要排序??

是的,有可能这种情况,谢谢

TA的精华主题

TA的得分主题

发表于 2023-2-5 17:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-5 18:03 | 显示全部楼层
如果是那样 就好整 我是
Sub 二级字典嵌套()
    Dim brr()
    arr = Sheet4.Range("A1").CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To 4)
    Dim dic
    Set dic = CreateObject("scripting.dictionary")
    For i1 = 3 To 5
        For i = 2 To UBound(arr)
            关键字1 = arr(i, 1) & ""
            关键字2 = arr(i, i1) & ""
            If Not dic.exists(关键字1) Then
                Set dic(关键字1) = CreateObject("scripting.dictionary") '二级字典对象建立 对象必须用Set 或者报错
            End If
            dic(关键字1)(关键字2) = dic(关键字1)(关键字2) + 1 '终级计数
        Next
        '    最大列数 = 0
        m = dic.Count
        For i = 0 To dic.Count - 1
            一级字典键值 = dic.keys()(i) '循环出一级字典键值
            brr(i + 1, 1) = 一级字典键值 '一级字典键值写入对应数组位置
            '        最大列数 = Application.Max(最大列数, dic(一级字典键值).Count) '取得需要的最大列
            二级字典键值数组 = dic(一级字典键值).keys
            二级字典值数组 = dic(一级字典键值).items
            For k = 0 To UBound(二级字典键值数组) '循环二级字典结果数组
                brr(i + 1, i1 - 1) = brr(i + 1, i1 - 1) & "-" & 二级字典键值数组(k) & 二级字典值数组(k) '循环二级字典 取出二级字典的键值和对应的item值进行连接
            Next
            brr(i + 1, i1 - 1) = Mid(brr(i + 1, i1 - 1), 2)
        Next
        dic.RemoveAll
    Next
    Sheet4.Range("g2").Resize(m, 4) = brr
    Set dic = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2023-2-5 18:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
答案 是不是这个意思

工作簿2.rar

30.96 KB, 下载次数: 16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-5 18:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-5 21:59 | 显示全部楼层

这个是最终效果,还缺一点就是ABCD的排序

本帖最后由 lushang2018 于 2023-2-5 22:00 编辑

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

本版积分规则

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

GMT+8, 2024-11-19 10:33 , Processed in 0.044706 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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