一、数组简介
在VBA中,数组是一种数据结构,可以使用单个变量名引用一系列值。这些值通过索引进行访问,索引通常是整数,用于标识数组中的每个元素的位置。 数组可以分为静态数组和动态数组两种。静态数组在声明时大小固定,而动态数组可以在运行时改变大小。
二、创建数组
使用Array函数创建数组
Dim arr(1 To 3) As Variantarr = Array(0, 1, 2)
创建了一个包含3个整数的一维数组。
使用Split函数创建数组
Split函数可以根据指定的分隔符将一个字符串分割成数组。例如:
Dim arr As Variant arr = Split("VBA,Python,SQL", ",")根据逗号将一个字符串分割成了三个字符串的数组。
通过单元格区域创建数组
如果你需要将Excel工作表中的一个区域的数据快速转换为数组,可以直接使用范围对象:
Dim arr As Variantarr = Range("A1:B3").Value将把A1:B3范围内的数据存储到数组arr中。
使用For循环创建数组
使用For循环逐个赋值给数组元素。这在你知道数组的大小和内容时是一种有效的方法。例如:
Dim arr(1 To 3) As Integer Dim i As Integer For i = 1 To 3 arr(i) = i Next i
三、动态数组
动态数组允许你在运行时改变数组的维度和大小,这在使用前无法预知数据量的情况下非常有用。
使用ReDim重新定义数组大小
Dim arr() As Variant ReDim arr(1 To a)
其中a是一个变量,表示数组的新大小。
使用Preserve关键字保留原有值
如果你更改数组的元素个数,但希望保留原有值,可以使用ReDim Preserve`:
ReDim Preserve arr(1 To a)
ReDim默认会重置已有的元素值,而ReDim Preserve不会。
四、数组运算
VBA数组支持多种运算,包括算术运算、比较运算和函数应用等。
Dim arr1(1 To 5) As Integer, arr2(1 To 5) As Integer, arr3(1 To 5) As IntegerFor i = 1 To 5 arr1(i) = i * 2 arr2(i) = i * 3 arr3(i) = arr1(i) + arr2(i)Next i
使用UBound和LBound函数
UBound和LBound函数可以分别获取数组的上界和下界:
Dim arr As Variant,upperBound As Integerarr = Array(1, 2, 3, 4, 5)upperBound = UBound(arr)
通过UBound和LBound可以计算数组的长度:
Dim length As Integer length = UBound(arr) - LBound(arr) + 1
使用Transpose函数转置数组
Transpose函数可以将数组的行和列互换:
Dim arr As Variant, arrTransposed As Variant arr = Range("A1:B3").Value arrTransposed = Application.WorksheetFunction.Transpose(arr)五、实际应用
下列代码展示了如何有效地使用VBA中的数组来处理和筛选Excel中的数据,通过将数据从工作表读取到数组中,减少了对Excel工作表的直接操作次数, 可以显著提高宏的运行速度,尤其是在处理大量数据时。
通过单元格区域创建数组:arr = Range("A2:A" & lastRow).Value
使用
For循环结合LBound和UBound函数遍历数组:For i = LBound(arr, 1) To UBound(arr, 1)使用
ReDim来调整数组的大小,根据符合条件的元素数量进行初始化:ReDim resultArr(1 To j, 1 To 1)将符合条件的数值存储到结果数组中:resultArr(j, 1) = arr(i, 1)
使用
Resize方法来确定目标范围的大小,以匹配筛选后的结果数组的行数和列数:Range("B" & resultRow).Resize(j, UBound(arr, 2)).Value = resultArr
