在日常工作中,我们经常会遇到需要在不同的Excel表格之间进行数据匹配和查询的情况。
一、数组简介在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