内容提要
详细需求:
具体数据表格: 1、Sheet1工作表,左边,原始数据: 2、Sheet1工作表,右边,汇总结果: 我们发现他的表头有点奇怪,真正的字段名称是在括号里面的,也许他是为了说明汇总的规则吧。看着这样的标题,我是浑身难受,一定要处理一下,这个后面再说,我们默认是表头经过处理后的数据。 多条件汇总,我们分享过一个案例【多条件查询统计:数据量太大,不想用SumProduct!】,跟今天的案例不太一样。 今天这个案例本身比较简单,但从学习VBA的角度来说,还是可以说道说道的。 他的要求是采用字典、数组来汇总,后来他又提出要按照部门、员工进行排序。 说到排序,我们可以想到工作表排序、SortedList排序、数组排序等。 我按照前两种方法写了代码,我们一起来看一下: 基本思路1(字典、数组、工作表排序): temp(m, i) = dic(dKey1)(dKey2) Sub SortRange( _ rng As Range, _ primarySortKey As Range, _ secondarySortKey As Range, _ Optional IncludeHeader As Boolean = True) '//按两列排序,默认数据包含标题 Dim ws As Worksheet Set ws = rng.Parent With ws.Sort .SortFields.Clear .SortFields.Add _ Key:=primarySortKey, _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal .SortFields.Add _ Key:=secondarySortKey, _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal .SetRange rng If IncludeHeader Then .Header = xlYes Else .Header = xlNo End If .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End WithEnd Sub 基本思路2(数组、SortedList排序): temp(i + 2, j) = lst.Item(key1).Item(key2) VBA代码 后记 lst.Item(key1).Item(key2) = lst.Item(key1).Item(key2) + arr(i, j)temp(i + 2, j) = lst.Item(key1).Item(key2) lst(key1)(key2) = lst(key1)(key2) + arr(i, j)temp(i + 2, j) = lst(key1)(key2) |
|