Excel VBA学习——数组和字典

Excel VBA学习——数组和字典

前言

数组和字典也是VBA的常用到数据类型之一。

事实上,字典不是VBA内置的类型,它是Windows脚本语言的。但其实字典在VBA中也是非常重要的,它非常适用于需要进行非重复性数据的操作。


一、数组

数组:

  • 多个变量的集合,而且它是有顺序的,通过索引来访问一个数组中的各个值;
  • 数组中的各个数据,它们的类型必须是相同的。

1.1 静态数组

所谓静态数组,即它的长度是固定不可变的。

basic
1
2
3
4
5
6
' 其中a和b均为数字,表示数据的索引起始值;
' 也可以只写一个数字,则此时数组使用默认索引,从1开始,数字表示它的长度;
Dim 数组名(a to b) As 数据类型
' -----------------------------------------------------------
Dim array1(10) As String
Dim array2(10 to 20) As String

1.2 动态数组

如果在定义时并不知道需要使用的数组的长度是多少,则可以定义它为动态数组:

basic
1
2
3
' 定义动态数组,只需要在括号里面留空就行了
' 待确定了数组的长度之后,可以使用ReDim来重新定义数组
Dim array3() As String

1.3 数组的赋值与取值

通过索引来对数组进行赋值,VBA中不是使用中括号[]而是使用小括号()进行的。

basic
1
2
3
4
5
6
7
8
9
Dim arr(5) As String

For i = 1 to 5
'赋值
arr(i) = i
Next

'取值
Debug.Print arr(1)

此外,也可以直接把Excel单元格中的数据赋值给数组。

如上面定义的长度为5的一维数组,可以以以下方式把单元格中A1到A5的数据分别载入到数组arr中:

basic
1
arr = Range("A1:A5")

1.4 多维数组

顾名思义,多个维度的数组;

basic
1
2
3
4
5
6
7
8
9
' 定义一个四行五列的二维数组:
Dim arr(4, 5) as String
' or
Dim arr(1 to 4, 5 to 8) As String
' -----------------------------------
' 定义一个三维数组:
Dim arr(3, 4, 5) As String
' or
Dim Myarr(1 to 3, 4 to 6, 7 to 9) As String

二、字典

字典其实就是一些"键-值"对。在很多场合,它都能起到很大的作用,使用起来非常方便,有类似于微型数据库的作用,可用于临时保存一些数据信息。

2.1 创建字典

VBA中创建字典有两种方法:

2.1.1 引用声明

在VBE菜单中,选择“工具–>引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(C:\Windows\System32),点击浏览,然后找到scrrun.dll,确定确定返回。添加引用后,就可以像定义其它变量一样声明使用字典了。

basic
1
Dim d As New Dictionary

2.1.2 直接创建

basic
1
2
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")

2.2 字典的方法

2.2.1 Add

Add:添加内容至字典;

basic
1
2
' 第一个为键,第二个为值
d.Add key,item

2.2.2 Exists

Exists:判断关键词是否在字典(的键)中;

basic
1
2
3
' 如果存在,返回True,否则返回False;
' 通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作;
d.Exists(key)

2.2.3 Keys

Keys:获取字典所有的键,返回类型为数组类型;

basic
1
d.Keys()

2.2.4 Items

Items:获取字典所有的值,回类型为数组类型;

basic
1
d.Items()

2.2.5 Remove

Remove:通过key来移除字典的键值对;

basic
1
2
' 如果指定的键不存在,会发生错误
d.Remove(key)

2.2.6 RemoveAll

RemoveAll:清空字典内容;


2.3 字典的属性

2.3.1 Count

Count:统计字段的键值对数量;

basic
1
d.Count

2.3.2 Key

Key:用于更改字典中已有的键;

basic
1
d.Key("apple") = "Orange" 

2.3.3 Item

Item:用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增;

basic
1
2
3
4
5
'读取
Debug.Print d.Item("apple")
'----------------------------
'写入
d.Item("apple") = 10

2.3.4 CompareMode

CompareMode: 用于设置或者读取字典对象中比较字符串时的比较模式;

e.g.

1
2
3
4
5
6
7
Sub test()
Dim a As Object
Set d = CreateObject("scripting.dictionary")
d.CompareMode = 1
d.Add "a", "123"
d.Add "A", "234"
End Sub

输出:d.comparemode = 1 表示字典中的关键字是不区分大小写的,d.comparemode = 0表 示字典中的关键字是区分大小写的

如图,若d.comparemode = 1,则新增关键字’a’时,会有错误提示,表示已经存在该关键字;若d.comparemode = 0,则能增加进去,无报错提示;

![](Pic/Excel VBA学习——数据类型/比较1.png)



参考资源:
Excel VBA入门(二)数组和字典
VBA中字典的属性和方法(二),收藏篇!
-------------本文结束感谢您的阅读-------------