第三章 字典
3.6 字典关键字选取
字典关键字的选取非常重要。为了确保健值的唯一性,我们可以选取表中的某一个字段作为关键字,也可以选取几个字段联合起来作为关键字。我们通过一个案例来说明多个字段作为关键字的用法。
小程序:
把下表中的数据按照班级和等级汇总后,输出到E列形成右边的表格。
班级 | 分数 | 等级 | 班级 | 分数 | 等级 | |
一班 | 77 | C | 一班 | 152 | C | |
一班 | 87 | B | 一班 | 87 | B | |
一班 | 75 | C | 二班 | 72 | E | |
二班 | 44 | E | 二班 | 97 | A | |
二班 | 28 | E | 三班 | 66 | D | |
二班 | 97 | A | 三班 | 193 | A | |
三班 | 66 | D | 四班 | 267 | B | |
三班 | 94 | A | 五班 | 184 | A | |
三班 | 99 | A | 五班 | 63 | D | |
四班 | 88 | B | 六班 | 88 | B | |
四班 | 89 | B | 六班 | 191 | A | |
四班 | 90 | B | ||||
五班 | 91 | A | ||||
五班 | 63 | D | ||||
五班 | 93 | A | ||||
六班 | 88 | B | ||||
六班 | 91 | A | ||||
六班 | 100 | A |
Sub 多字段关键字()
Dim d As New Dictionary
arr = Range('a1').CurrentRegion
For i = 1 To UBound(arr)
If d.Exists(arr(i, 1) & arr(i, 3)) Then
d(arr(i, 1) & arr(i, 3)) = Array(arr(i, 1), arr(i, 2) + d(arr(i, 1) & arr(i, 3))(1), arr(i, 3))
Else
d.Add arr(i, 1) & arr(i, 3), Array(arr(i, 1), arr(i, 2), arr(i, 3))
End If
Next
[e1].resize(d.Count, 3) = Application.Transpose(Application.Transpose(d.Items))
End Sub
在这个程序里,把班级和等级联合起来作为关键字,形成如下图所示的字典:
字典的条目仍然使用数组方式,所以汇总数据的代码变为 arr(i, 2) + d(arr(i, 1) & arr(i, 3))(1),循环出来的数据加上联合字段对应条目的第2项,即d(arr(i, 1) & arr(i, 3))(1)。
字典这一章节到这里就准备告一段落了。本章节篇幅较少,主要得益于字典的方法和属性简单实用。通过本章节的学习我们发现,字典是一个很好用的工具,在去除重复项、汇总统计等方面发挥着巨大作用,代码简洁,运行速度非常快。在使用时,字典与数组结合,会相得益彰,事半功倍。字典的关键字,可以是表格里的一列,也可以是多列值的联合值,主要是看实际情况中哪个值是唯一的。字典的条目,使用嵌套数组,可以对多列数据同时进行汇总统计,使数据处理变得更高效。
联系客服