第三章 字典
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 去除重复项与分类汇总
我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!
留言与评论(共有 0 条评论) “” |