当前位置: 主页 > Office办公 > Excel专区 > Excel教程 > VBA教程:数组、集合和字典

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

  • 2022-11-12
  • 来源/作者: Wps Office教程网/ 菜鸟图库
  • 311 次浏览

之前的一些文章,我们详细解了集合、数组和字典这三种常用的数据结构。在本文中,我们简单小结一下,看看它们之间有哪些区别,以巩固所学的知识。

存储的类型

数组

数组是一组具有相同名称的同类元素。可用来存储多个相同类型的变量。

集合

集合可以用来存储不同的数据类型。

字典

字典可以用来存储不同的数据类型。

注意,在数组中,可以存储用户定义类型。然而,不能在字典或集合中存储用户定义类型。

变量声明

数组

在声明数组变量时,可以指定数组的大小,如:

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)

添加元素

添加元素时,集合与字典的参数位置刚好相反,例如:

‘在集合中添加元素

col.Add Item:=6, Key:=”东区”

‘在字典中添加元素

dict.Add Key:=”东区”,Item:=6

然而,对于集合,没有内置的方法来检查是否已存在指定的键,但是可以使用Exists方法检查字典中是否存在指字键。

什么时候使用

在编程时,通常要求我们能创建一个对象,能够存放一组相关的值,并且能够通过该对象便捷地处理存储的值,数组、集合、字典都能实现这个目的。

数组

当有许多同类型的数据需要逐一处理时,可以使用数组。然而,数组的大小在使用之前通常是固定的,因此在知道数据数量的前提下使用数组。

集合

集合可任意添加或删除元素,因此对于数量变化的数据使用集合更好。相对于数组,集合更容易使用一些,特别是添加元素、遍历元素。然而,集合是只读的,你可以添加或删除集合中的元素,但不能修改其值。

字典

有一系列数据,但是需要获取不重复元素值时,可以使用字典。

字典与集合

集合是一种很好的数据结构,在Excel对象模型中几乎所有的容器结构都是使用集合,例如:Workbooks、Worksheets等。

然而,字典有更多的内置方法,使得其使用比集合更方便。特别是下列3个方法:

1.Exists方法:用来判断字典中是否存在指定的键。(如果要在集合中检查指定的键是否存在,则需要额外编写一段代码来完成)

2.Keys方法:返回一个数组,包含字典中所有的键。(同样,集合中实现相同的目的需要编写遍历和填充的代码)

3.RemoveAll方法:清除字典中所有的元素。

此外,正如前面提到的,字典允许我们修改键和值。并且,由于Dictionary对象使用了散列表和一些先进的排序和索引算法,因此字典的运行速度也快于集合的速度。

数组与集合

与使用数组相比,使用集合对象更便于访问和维护:

1.集合成员可以添加在一个已经存在成员的前面或后面,这取决于该已有成员的键值或索引值。

2.集合成员可以通过它们的键值或索引值访问。

3.集合成员可以通过它们的键值或索引值删除。但是,利用一个索引值删除多个成员时,应该从后面开始删除,即从索引值较高的成员到索引值较低的成员,因为每次删除成员后集合就要重新建立索引。

数组与字典、集合

正如前面提到的,在数组中,可以存储用户定义类型。然而,不能在字典或集合中存储用户定义类型。