VBA数组 Redim 动态数组
1 动态数组需求说明
先回顾数组声明语法中:
Dim 数组变量名称(最大下标) As 元素数据类型
最大下标不能为变量,只能为常量或常量表达式。
示例:
Sub array7()
'动态数组需求
Dim i As Integer
i = 10
Dim arr1(i) As Integer '运行报错:要求常数表达式
End Sub
普通数组为固定数组,也称为静态数组。
声明变量时,最大(小)下标为变量的数组,则称为动态数组,需要通过Redim实现。
2 动态数组声明语法
ReDim 数组变量名称(变量) As 元素数据类型
下标为变量。
示例:
Sub array8()
Dim i As Integer
i = 10
'Redim声明动态数组,下标可以为变量
ReDim arr1(i) As Integer
arr1(0) = 100
arr1(10) = 1000
Debug.Print arr1(0) & "," & arr1(10)
i = 100
'再次执行Redim,重新分配大小。所有数据会自动清空。
ReDim arr1(i) As Integer
arr1(100) = 9999
Debug.Print arr1(0) & "," & arr1(100)
End Sub
运行结果:
100,1000
0,9999
第1次Redim后:第1个元素的值原先为100;
第2次Redim后:第1个元素的值被清空为0。
3 Preserve保留原有数据
默认情况,再次Redim会自动清空已有数据,如果需要保留,可使用Preserve关键字。
语法
ReDim Preserve 数组变量名称(变量) As 元素数据类型
示例代码:
Sub array9()
Dim i As Integer
i = 10
ReDim arr1(i) As Integer
arr1(0) = 100
arr1(10) = 1000
Debug.Print arr1(0) & "," & arr1(10)
i = 100
' Preserve已有数据会保留。
ReDim Preserve arr1(i) As Integer
arr1(100) = 9999
Debug.Print arr1(0) & "," & arr1(100)
End Sub
运行结果:
100,1000
100,9999
第1次Redim后:第1个元素的值原先为100;
第2次Redim后:仍然保留值100。