Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2113|回复: 6

[已解决]字典法按列标题汇总

[复制链接]
发表于 2013-1-11 12:54 | 显示全部楼层 |阅读模式
要求此处的列标题改动位置后,代码不需要修改
Book1.rar (6.39 KB, 下载次数: 30)
发表于 2013-1-11 13:55 | 显示全部楼层
回复

使用道具 举报

发表于 2013-1-11 14:24 | 显示全部楼层
不知你是要按班组汇总,还是按姓名汇总??

评分

参与人数 1 +3 收起 理由
hcy1185 + 3 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2013-1-11 14:24 | 显示全部楼层
盲写一个
Sub test()
    Dim i&, j&, x&, k, arr, arr1(), d As Object
    Set d = CreateObject("Scripting.Dictionary")
    arr = Range([A2], [D65536].End(3))
    For i = 1 To UBound(arr, 1)
        If Not d.Exists(arr(i, 1)) Then
            d(arr(i, 1) & "|" & arr(i, 2)) = d.Count + 1
            k = d.keys
            ReDim Preserve arr1(1 To 4, 1 To d.Count)
            For x = 0 To d.Count - 1
                For j = 0 To 1
                    arr1(j + 1, d.Count) = Split(k(x), "|")(j)
                Next j
            Next x
        End If
    Next i
    For x = 1 To UBound(arr1, 2)
        For i = 1 To UBound(arr)
            If arr(i, 1) = arr1(1, x) And arr(i, 2) = arr1(2, x) Then
                arr1(3, x) = arr1(3, x) + arr(i, 4)
                arr1(4, x) = arr(i, 3)
            End If
        Next i
    Next x
    Range("H2:K65536").ClearContents
    [H2].Resize(d.Count, 4) = Application.Transpose(arr1)
End Sub


评分

参与人数 1 +1 收起 理由
hcy1185 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-1-11 16:38 | 显示全部楼层
本帖最后由 hcy1185 于 2013-1-11 16:41 编辑

要求h1:k1处的列标题改动位置后,代码不需要修改
在1楼代码的基础上修改
按班组,姓名分类汇总
回复

使用道具 举报

发表于 2013-1-12 09:15 | 显示全部楼层
本帖最后由 zjdh 于 2013-1-12 09:23 编辑

Sub 按列标题汇总()
    Dim dTitle, arr, i&, dic, dic2, k, brr
    arr = Sheet6.[a1].CurrentRegion
    Set dTitle = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr, 2)
        dTitle(arr(1, i)) = i
    Next
    Set dic = CreateObject("Scripting.Dictionary")
    Set dic2 = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(arr)
        BM = arr(i, dTitle("班组")) & "|" & arr(i, dTitle("姓名"))
        dic(BM) = dic(BM) + arr(i, dTitle(Cells(1, 9).Value))
        dic2(BM) = dic2(BM) + arr(i, dTitle(Cells(1, 10).Value))
    Next
    k = dic.keys
    ReDim brr(1 To dic.Count, 1 To dTitle.Count)
    For i = 1 To UBound(brr)
      brr(i, 1) = Split(k(i - 1), "|")(0)
      brr(i, 2) = Split(k(i - 1), "|")(1)
      brr(i, 3) = dic(k(i - 1))
      brr(i, 4) = dic2(k(i - 1))
    Next
    Range("G2:J65536").ClearContents
    Range("G2").Resize(dic.Count, 4) = brr
End Sub

评分

参与人数 1 +3 收起 理由
hcy1185 + 3 神马都是浮云

查看全部评分

回复

使用道具 举报

发表于 2013-1-12 09:30 | 显示全部楼层    本楼为最佳答案   
按列标汇总.rar (10.18 KB, 下载次数: 153)

评分

参与人数 1 +3 收起 理由
hcy1185 + 3 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 14:46 , Processed in 0.542431 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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