### VBA数组学习笔记
#### 一、数组的声明与初始化
在VBA中,数组是一种非常重要的数据结构,用于存储一系列同类型的值。数组的声明与其他变量类似,可以通过`Dim`、`Static`、`Private`或`Public`语句进行。与普通变量不同的是,在声明数组时通常需要指定其大小。
**1. 固定大小数组**
如果数组的大小在声明时就被确定下来,这样的数组称为固定大小数组。例如:
```vba
Dim MyArray(10, 10) As Integer
```
这里创建了一个二维整型数组`MyArray`,第一维大小为11(0到10),第二维同样为11。
**2. 动态数组**
如果数组的大小可以在程序运行过程中被修改,则称之为动态数组。使用`ReDim`语句可以改变动态数组的大小。例如:
```vba
Dim MyIntegerArray() As Integer
ReDim MyIntegerArray(10)
```
这里首先声明了一个动态整型数组`MyIntegerArray`,然后通过`ReDim`将其大小设置为11个元素。
#### 二、数组内存占用与类型
不同的数据类型会占用不同的内存空间。例如,`Integer`类型的数据每个元素占用2字节,而`Double`类型的数据每个元素占用8字节。因此,当定义一个较大的数组时,需要考虑内存占用问题。
**示例:**
```vba
ReDim MyIntegerArray(99, 99) As Integer '占用20,000字节
ReDim MyDoubleArray(99, 99) As Double '占用80,000字节
ReDim MyVariantArray(99, 99) '占用160,000字节
```
这里可以看到,相同大小的数组,根据数据类型的不同,所占用的内存空间也不同。
#### 三、数组的重新调整与保留原有值
有时候需要改变数组的大小,这时可以使用`ReDim`语句。需要注意的是,默认情况下,使用`ReDim`会丢失原有的数组值。为了保留原有的数组值,可以使用`ReDim Preserve`。
**示例:**
```vba
Dim varArray(10) As Integer
ReDim Preserve varArray(UBound(varArray) + 10)
```
以上代码中,`varArray`最初有10个元素,通过`ReDim Preserve`操作后,它的大小变为20,同时保留了原来的10个元素的值。
#### 四、数组的索引与维度
数组的索引是从0或1开始的,这取决于`Option Base`的设置。默认情况下,索引从1开始。数组可以是一维、二维或多维的。
**示例:**
- 一维数组:`Arr(1 to 12)`
- 二维数组:`Arr2(1 to 5, 1 to 8)`
- 三维数组:`Arr3(5 to 10, 6 to 12, 1 to 100)`
使用`UBound`函数可以获得数组某一维度的最大索引值。
**示例:**
```vba
Dim Arr(1 To 12) As Integer
Dim maxIndex As Integer
maxIndex = UBound(Arr) ' maxIndex 的值为 12
```
#### 五、数组的其他高级用法
除了基本的声明和使用外,VBA还支持多种高级数组操作,如通过Excel区域填充数组、数组公式等。
**1. 通过Excel区域填充数组**
可以直接将Excel中的某个区域的数据读取到数组中。
```vba
Dim arr As Variant
arr = Range("A1:B10").Value
```
**2. 数组公式**
可以使用数组公式来执行批量计算。
```vba
Dim arr As Variant
arr = [A1:B10]
' 将数组公式应用于另一个范围
Range("C1:D10").Formula = "=SUM(arr)"
```
**3. 数组的排序与过滤**
还可以使用内置函数对数组进行排序或过滤特定值。
```vba
Dim Arr() As String
Arr = Array("a", "sas", "s", "Sas", "s", "f", "f", "f", "f", "sas", "s", "sas", "a", "a", "Sas", "s", "s")
Dim temp() As String
Dim count As Long
count = 0
temp = Filter(Arr, "Sas")
' 这里temp数组包含了所有"Sas"的值
count = UBound(temp) - LBound(temp) + 1 ' 统计"Sas"出现的次数
```
#### 六、总结
通过上述内容,我们可以了解到VBA中数组的基本用法以及一些高级功能。数组是处理大量数据时不可或缺的工具,掌握其使用方法对于提高编程效率非常重要。希望这些知识点能够帮助大家更好地理解和使用VBA数组。