关于VBA中数组的一些问题
1.数组定义中Dim Arr() As Variant与Dim Arr As Variant的区别
Dim Arr As Variant只是定义了一个Variant型变量,不代表这是数组
Dim Arr() As Variant是定义了一个动态数组,数组中的元素是Variant型
2.数组下标的区别
数组默认下标可能为0或者1,具体情况如下
(1)使用方括号赋值或者从工作表Range读入数据并赋值给数组时,下标为1
方括号赋值举例:
[{"一", "二", "三", "四"}] '一维数组
[{"五", "六";"七", "八"}] '二维数组
工作表Range赋值时,即使只有一列数据,也是一个二维数组。
(2)利用Array()函数为数组赋值时,下标取决于Option Base语句
如有Option Base 1,数组下标为1;如有Option Base 0或省略该句,数组下标为0。
其中Option Base语句是模块级语句,必须写在模块的最前部分,且不能后续更改。
(3)如果未指定Option Base 1,且想用Array()函数批量赋值,并使下标为1,是做不到的,只能先定义下标为1的数组(动态数组Redim亦可),然后对元素依次赋值。
3.静态数组不允许Redim,动态数组允许Redim,Redim只允许改变最高维
例如:
Dim Arr(1 To 2) As Variant,不允许Redim Arr(1 To 3)
Dim Arr() As Variant,允许Redim Arr(1 To 3)
4.二维数组与数组嵌套
(1)方括号赋值可以直接对二维数组赋值,举例见2(1)部分
(2)Array()函数不能形成二维数组,只能是数组的嵌套
(3)二维数组必须是一个“矩形”,而数组嵌套则无此限制
举例:
Arr1=[{"一", "二"; "三", "四"}] '允许
Arr2=[{"一", "二"; "三", "四", "五"}] '不允许
Arr3=Array(Array("一", "二"), Array("三", "四", "五")) '形成的是一维数组的嵌套,Arr3()有两个元素,都是数组,其中第一个数组有两个元素,第二个数组有三个数组
如果要引用Arr1中值为"三"的元素,代码为Arr(2,1);要引用Arr2中值为"三"的元素,代码为Arr(2)(1)。