excelperfect
下面列举字典对象的一些操作示例和技巧,进一步理解字典的应用。
示例1:在一个键中存储多个值
在前面的讲解中,我们添加到字典中的元素都是一个键对应着一个值,如果我们想要在字典对应的每个键中存储多个值,该怎样做呢?
经过前面一系列数据结构文章的学习,大家一定会想到使用数组或者集合作为值。但是,还有更好的办法,就是使用类模块。
如下图1所示,我们想要在不同的字典键中分别存储图示工作表每行数据。
图1
首先,在VBE编辑器中插入一个类模块,将其重命名为clsStudent,输入代码:
Public StudentID As String
Public strName As String
Public lngScore As Long
分别代表图1工作表中的编号、姓名和分数。
然后,插入一个标准模块,输入代码:
Sub AddMultiValue()
Dim dict As Object
Dim oStud As clsStudent
Dim lngLastRow As Long
Dim i As Long
'创建字典对象
Set dict = CreateObject("Scripting.Dictionary")
'工作表Sheet1中最后一行
lngLastRow =Worksheets("Sheet1").Range("A" &Rows.Count).End(xlUp).Row
'遍历工作表数据
'将数据存储到字典中
For i = 2 To lngLastRow
Set oStud = New clsStudent
oStud.StudentID =Worksheets("Sheet1").Cells(i, 1).Value
oStud.strName =Worksheets("Sheet1").Cells(i, 2).Value
oStud.lngScore =Worksheets("Sheet1").Cells(i, 3).Value
dict.Add oStud.StudentID, oStud
Next i
'遍历字典并打印值
Dim k As Variant
For Each k In dict.keys
Debug.Print dict(k).StudentID, _
dict(k).strName, _
dict(k).lngScore
Next k
End Sub
运行代码后的结果如下图2所示。
图2
示例2:获取唯一值
可以利用字典键唯一这个特性,来获取列表唯一值。例如下图3所示的工作表,有多个重复数据,现在想要获取这些数据的不重复值。
图3
编写代码如下:
Sub GetUniqueValue()
Dim dict As Object
Dim wks As Worksheet
Dim lngLastRow As Long
Dim i As Long
'创建字典对象
Set dict = CreateObject("Scripting.Dictionary")
'设置工作表对象
Set wks = Worksheets("Sheet2")
'工作表最后一行
lngLastRow = wks.Range("A" & Rows.Count).End(xlUp).Row
'错误处理
On Error Resume Next
'遍历工作表并在字典中添加数据
For i = 1 To lngLastRow
dict.Add wks.Cells(i, 1).Value, _
wks.Cells(i, 1).Value
Next i
'遍历字典键并打印
Dim k As Variant
For Each k In dict.keys
Debug.Print k
Next k
End Sub
运行后的结果如下图4所示。
图4