关于VBA中数组的一些问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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()有两个元素,都是数组,其中第一个数组有两个元素,第二个数组有三个数组

以上是关于关于VBA中数组的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中复制数组引用

关联数组与多维数组,VBA

在 VB6/VBA 中是不是真的需要对象清除/数组释放(优点/缺点?)

数组中多个 if 语句的 VBA 代码

将包含一些空值的CSV文件读入VBA数组

简单的 VBA 数组连接不起作用