本帖最后由 hwc2ycy 于 2014-2-28 23:58 编辑
从今天开始,我们聊聊VBA中的数组。 那么什么是数组(array)呢? 帮助中是这么定义的:连续可索引的具有相同内在数据类型的元素所成的集合,数组中的每一元素具有唯一索引号,更改其中一个元素并不会影响其它元素。简单而言之,数组就是一组数据的存储空间。在这个存储空间中,可以放常见的数据类型如整型,字符串型,逻辑型,还可以存储对象,甚至是数组。
数组的优势在哪?
在数组中可以存储很多的值,普通的变量声明一次只能存储一个值。打个比方,如果要储存一年中每天的支出,使用数组的话,可以声明一个具有365个元素的数组变量,而不是声明365个变量。对于数组,可以引用整个数组中存储的值,也可以引用数组中的某个元素。在频繁读写单元格的场合中,如果对代码的速度有要求,经常会考虑使用数组来优化。
数组的分类
数组的类型,从维数上来分的话可以分为1维,2维,3维…… 从声明的方式上来说可以有静态数组(大小固定)和动态数组(大小可调整)。
数组中常见的几个概念:
下标,下界:数组中的每个元素都有特定的序列号。这个序列号也不是随便来的,需要代码在声明时指定。下标相当于某一维的第一个编号(开始),在声明时下标是可以省略的,缺省情况下下标省略时默认值为0。 上标,上界:上标相当于某1维的最后一个编号(结束),在声明时必须明确指定。 维数:数组常用的就是1维和2维,数组中每个元素都有一个唯一的编号。 1 维数组通过1 个编号就能定到。
例如上图声明的1维数组arr,一共有3个元素,元素的编号从1到3。
2 维数组就要通过2 个编号的组合(类似于单元格的要通过行号与列号定位)来定位一个元素,如下图:
上图中的arr数组,第1维编号从1到4,第2维编号从0到2,对于2维,可以用单元格的地址表示法来理解,如第2行第0列。
某1维的大小可以通过这个公式计算:上标-下标+1,如上图第1维的大小是4-1+1=4
数组中元素的总数是每1维的大小相乘即可,上图中数组元素个数:(4-1+1)*(2-0+1)=12
静态数组的声明:
Dim 数组名([下标 to] 上标,[下标 to ] 上标) [as [下标 to] 上标,表明每1维的大小。数组有几维,就添加几个[下标 to] 上标说明,各个维数声明之间用逗号相隔。
数据类型可以根据情况来选择,缺省为Variant类型。
下标通常是小于或等于上标的,否则会有编译错误提示,如下图:
第1维的下标是5,比上标1大。 第2维的下标是-10,比上标-1小。
定义一个2行3列的2维数组
dim arr(1 to 2,1 to 3)
定义一个1维数组
dir arr1(1 to 10)
当定义多维数组时,任意1维的上标是不可缺少的。而下标值是有个缺省值的,默认为0。下标的缺省值可以在模块顶端添加Option base语句进行更改的。
Option base 1 下标值从1开始 Option base 0 下标值从0开始。
当在模块顶端添加了语句 Option base 1后 dim arr1(1,3) 定义的是1行3列的数组 一般建议完整的写出上下标,如arr(1 to 1,1 to 3)
如果没有使用option base 语句 或 使用了option base 0后
dim arr1(1,3) 定义的是2行4列的数组
|