VBA教程:数组、集合和字典

之前的一些文章 , 我们详细解了集合、数组和字典这三种常用的数据结构 。在本文中 , 我们简单小结一下 , 看看它们之间有哪些区别 , 以巩固所学的知识 。
【VBA教程:数组、集合和字典】存储的类型
数组
数组是一组具有相同名称的同类元素 。可用来存储多个相同类型的变量 。
集合
集合可以用来存储不同的数据类型 。
字典
字典可以用来存储不同的数据类型 。
注意 , 在数组中 , 可以存储用户定义类型 。然而 , 不能在字典或集合中存储用户定义类型 。
变量声明
数组
在声明数组变量时 , 可以指定数组的大小 , 如:
Dim MyArray(5) As Integer
也可以先不指定数组的大小:
Dim MyArray() As Integer
在使用之前 , 须指定其大小:
ReDim MyArray(5)
集合
可以先声明集合变量:
Dim col As Collection
在需要使用该集合前创建集合对象:
Set col = New Collection
也可以在声明的同时创建集合对象:
Dim col As New Collection
字典
创建字典对象 , 先要设置对库文件Microsoft Scripting Runtime的引用 。可以编写声明字典对象变量的代码如下:
Dim dict As New Dictionary
或者:
Dim dict As Dictionary
Set dict = New Dictionary
对元素赋值
1.不能对集合中已有元素重新赋值 。
2.可以修改字典元素的值 。在给指定键的字典元素赋值时 , 如果指定键的字典元素已存在 , 则会修改该元素的值 。如果指定键的字典元素不存在 , 则会添加新字典元素 。
3.集合、字典都是对象 , 在返回整个对象时 , 应使用Set语句 。
对元素的访问
数组、集合、字典的存储结构不同 , 决定了访问其元素的差异 。
数组
每个元素放置在固定的位置 , 我们需要知道其索引 , 来访问它 。例如:
Dim MyArray(5) As Integer
Dim i As Integer
For i = 0 To 5
MyArray(i) = i
Nexti
‘访问第2个元素
Debug.Print MyArray(1)
数组的索引值默认从0开始 。
集合
下面的代码先声明集合对象 , 然后在添加元素项时定义键值:
Dim col As Collection
Dim rng As Excel.Range
Dim sRangeName As String
Set col = New Collection
sRangeName= “RangeName”
Set rng = Range(sRangeName)
col.Add rng, sRangeName
此时 , 想从该集合中获取特定元素项时 , 可以指定其位置(索引值) , 或者使用键值 。如果你知道其是第一个添加到集合中的且位置没有变化 , 可以使用索引值:
col.Item(1)
集合的索引值基于1 。也可以使用键值:
col.Item(sRangeName)
集合的索引值从1开始 。
字典
字典中有唯一标识元素的键 , 我们只需要使用这个键来访问元素 , 而不需知道其具体的存放位置 。
下面的代码添加对象到字典中 , 其语法与添加元素项到集合中非常相似 , 只是键和元素参数的位置相反:
Dim dict As Scripting.Dictionary
Dim rng As Excel.Range
Dim sRangeName As String
Set dict = New Scripting.Dictionary
sRangeName= “RangeName”
Set rng = Range(sRangeName)
dict.Add sRangeName, rng
可以使用下面的语句来获取指定键所在的元素项:
dict.Item(sRangeName)
添加元素
添加元素时 , 集合与字典的参数位置刚好相反 , 例如:

推荐阅读