购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 数组变量

2.6.1 数组的概念

数组是一组相同数据类型的有序数据的集合。我们也可以把数组看成是一个组合变量,由许多相同数据类型的数据组成。数组中的所有数据具有相同的名称———数组名,我们要具体引用某个数据需要使用索引值即下标来完成,下标用来指明该数据在数组中的位置。VBA把数组看作一个可以存储许多值的变量,可以对数组本身进行操作,包括所有的值。

1.一维数组

数组是一种变量,所以我们可以用定义变量的关键字dim/private/public/static来定义数组,和普通变量的区别在于,数组变量需要在名称后加上括号。定义数组的语法格式为:

Dim|Public|Private|Static数组名(a to b)[As数据类型]

该数组包含b-a+1个元素,其中a是下界,b是上界,下界必须小于或等于上界。

例如:Private b(10)as date定义一个名称为b的数组,数组类型为日期型,数组中有11个数组元素(下标从0开始计数),这是固定大小的数组,它的大小不能改变。

数组的每一维都具有上界和下界,默认下界从0开始,我们可以在定义数组的模块的通用声明段使用语句option base 1强制使得数组下标从1开始。

2.多维数组

刚才看到的是一维数组,而VBA中数组最多可以到六十维,我们通常使用的是一维数组和二维数组。Excel中的一张sheet表我们可以把它看成是一个二维数组,而其中的一行或者是一列则可以把它们看成是一维数组。多维数组在定义的时候把维数用逗号隔开,例如下面的语句定义了一个名称为a的二维数组,共包含3*2个数组元素,它可以对应于Excel表中的一段三行两列的区域。如表2-9所示。

Option base 1

Dim a(3,2)

表2-9 二维数组的数据排列

类似的,我们可以想象三维数组是一个有多张sheet的工作簿。

3.动态数组

之前我们讨论的数组是大小固定的数组,而有的时候我们定义数组的时候并不确定数组的大小,比如我们用一个过程把窗口两两并排,需要一个数组存放每一个打开的窗口的名称,但是运行的时候并不知道会打开多少个窗口,这就需要使用到动态数组。

定义动态数组的方法和定义固定大小的数组的方法是一样的,区别在于数组名后的括号里是空的。如:

Option base 1

Dim arraya()as single 定义一个名称为arraya的数组,数据类型为单精度型,大小不定

在程序运行过程当中动态数组的大小需要改变的时候我们使用redim语句。比如刚才的arraya数组现在需要改变它的大小为5个数组元素,我们可以使用语句redim arraya(5)。Redim语句中数组的上下界可以使用变量。如redim arraya(m,n)。

需要注意的是,使用redim语句改变数组的大小的时候,数组内原有的数据会丢失,如果需要保留原有数据,需要在redim之后加上关键字preserve,如刚才的语句就可以写成redim preserve arraya(5)。加上preserve之后,在重定义的时候我们只能改变数组最后一维的维上界。

2.6.2 数组的函数和语句

1.LBoud函数和UBound函数

LBound是Low Bound的缩写,其意义为“下界”。函数的格式如下:

LBound(<数组名>[,<维序数>])

函数的功能是返回数组指定维的下界值,返回值的类型为Long。函数的两个参数中第2个参数“维序数”可以缺省,缺省时,返回指定数组的第一维的维下界。

UBound是Up Bound的缩写,其意义为“上界”。函数的格式如下:

UBound(<数组名>[,<维序数>])

函数的功能是返回数组指定维的上界值,返回值的类型为Long。函数的两个参数中第2个参数“维序数”可以缺省,缺省时,返回指定数组的第一维的维上界。

如msgbox ubound(arraya,2)它可以返回名称为arraya数组的第二维的维上界,并在消息框中显示出来。

2.Array函数

array函数的格式如下:

array(参数列表)

函数的功能是返回一个变体型的数组,参数列表是用逗号隔开的值表,这些值用于给数组的各个元素赋值。Array函数不能创建二维数组。

例如我们可以使用语句range('a2:e2')=array(1,2,5,8,9)给excel的单元格赋值,运行后效果如图2-5所示。

图2-5 array函数运行结果

3.Isarray函数

Isarray函数的格式如下:

Isarray(变量名)

函数的功能是判断一个变量是否是数组,返回值是布尔值true或者false。因为数组是变量的一种,所以我们有时候需要区别一个变量到底是数组变量还是非数组变量,这个时候就可以用isarray函数。例如:

a=Array('语文','数学','英语')

MsgBox IsArray(a)

运行之后会弹出消息框,显示true。

4.Erase语句

Erase语句的格式如下:

Erase数组名1,数组名2,…,数组名n

该语句的功能对固定大小的数组是重新初始化,对动态数组是释放动态数组的存储空间,恢复到之前定义它们的状态。 FCeFgv7LC0XxEwKLHHjC7gZH0RnnaHbYceojQlluxd0izT0NRibHhvY5MI/3x+7f

点击中间区域
呼出菜单
上一章
目录
下一章
×