学习VBA,报表做到飞 第三章 字典 3.5 字典嵌套数组

第三章 字典

3.5 字典嵌套数组

字典的条目可以是一个数值,也可以是一个数组。用数组来做字典的条目,可以极大地提升字典的使用空间,让报表处理变得更便捷。现在例举一个小程序来说明字典条目使用数组的方法。

小程序:

把左边的表格进行分类汇总,然后输出到E列,形成右边的表格。

一班

15

A


一班

70

A

一班

20

A


二班

109

B

一班

35

A


三班

183

C

二班

44

B


四班

267

D

二班

28

B


五班

276

E

二班

37

B


六班

289

F

三班

66

C





三班

18

C





三班

99

C





四班

88

D





四班

89

D





四班

90

D





五班

91

E





五班

92

E





五班

93

E





六班

94

F





六班

95

F





六班

100

F





Sub 字典嵌套数组()

Dim d As New Dictionary

arr = Range("a1").CurrentRegion

For i = 1 To UBound(arr)

If d.Exists(arr(i, 1)) Then

d(arr(i, 1)) = Array(arr(i, 1), arr(i, 2) + d(arr(i, 1))(1), arr(i, 3))

tm = d(arr(i, 1))

Else

d.Add arr(i, 1), Array(arr(i, 1), arr(i, 2), arr(i, 3))

tm = d(arr(i, 1))

End If

Next

[e1].resize(d.Count, 3) = Application.Transpose(Application.Transpose(d.Items))

End Sub

把数组作为字典的条目,会让字典的条目形成一个从0开始的嵌套数组。小程序里的tm = d(arr(i, 1))语句没有实际执行功能,仅用于在程序执行时可以更直观的看到字典条目的结构,该结构如下图所示:

这个程序最关键的一句就是d(arr(i, 1)) = Array(arr(i, 1), arr(i, 2) + d(arr(i, 1))(1), arr(i, 3)),对于已经写入字典的键值,修改它的条目第二项为arr(i, 2) + d(arr(i, 1))(1),即循环到的数值加上该键对应的已合计的数值。因为嵌套数组从0开始,所以已合计的数值为d(arr(i, 1))(1),对应上图的tm(1)。


往期精彩回顾:

学习VBA,报表做到飞 第三章 字典 3.4 去除重复项与分类汇总

学习VBA,报表做到飞 第三章 字典 3.3 字典的属性

学习VBA,报表做到飞 第三章 字典 3.2 字典的方法


我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章