声明数组
数组的声明方式和其它的变量是一样的,它可以使用 Dim、Static、Private 或 Public 语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。
数组是否从 0 或 1 索引是根据 Option Base 语句的设置。如果 Option Base 没有指定为 1,则数组索引从零开始。
声明固定大小的数组
下面这行代码声明了一个固定大小的数组,它是个 11 行乘以 11 列的 Integer 数组:
Dim MyArray(10, 10) As Integer
第一个参数代表的是行;而第二个参数代表的是列。
与其它变量的声明一样,除非指定一个数据类型给数组,否则声明数组中元素的数据类型为 Variant。数组中每个数组的数字型 Variant 元素占用 16 个字节。每个字符串型 Variant 元素占用 22 个字节。为了尽可能使写的代码简洁明了,则要明确声明的数组为某一种数据类型而非 Variant。下面的这几行代码比较了几个不同数组的大小:
' 整型数组使用 22 个字节(11 元素* 2 字节)
ReDim MyIntegerArray(10) As Integer
' 双精度数组使用 88 个字节(11 元素 * 8 字节)。
ReDim MyDoubleArray(10) As Double
' 变体型数组至少使用 176 字节(11 元素 * 16 字节)。
ReDim MyVariantArray(10)
' 整型数组使用 100 * 100 * 2 字节(20,000 字节)。
ReDim MyIntegerArray (99, 99) As Integer
' 双精度数组使用 100 * 100 * 8 字节(80,000 字节)。
ReDim MyDoubleArray (99, 99) As Double
' 变体型数组至少使用 160,000 字节(100 * 100 * 16 字节)。
ReDim MyVariantArray(99, 99)
数组变量的最大值,是以的操作系统与有多少可用内存为基础。若使用的数组大小超过了系统中可用内存总数的话,则速度会变慢,因为必须从磁盘中读写回数据。
声明动态数组
若声明为动态数组,则可以在执行代码时去改变数组大小。可以利用 Static、Dim、Private 或 Public 语句来声明数组,并使括号内为为空,如下示例所示。
Dim sngArray() As Single
注意 可以在过程中使用 ReDim 语句来做隐含性的数组声明。当使用 ReDim 语句时要小心点,不要拼错数组的名称。否则即使在模块中有包含 Option Explicit 语句,仍然会因此而生成第二个数组。
对于过程中的数组范围,可以使用 ReDim 语句去改变它的维数,去定义元素的数目以及每个维数的底层绑定。每当需要时,可以使用 ReDim 语句去更改动态数组。然而当做这个动作时,数组中存在的值会丢失。若要保存数组中原先的值,则可以使用 ReDim Preserve 语句来扩充数组。例如,下列的语句将 varArray
数组扩充了10 个元素,而原本数组中的当前值并没有消失掉。
ReDim Preserve varArray(UBound(varArray) + 10)
注意 当对动态数组使用 Preserve 关键字时,只可以改变最后维数的上层绑定,而不能改变维数的数目。
使用数组
可以声明一个数组来代表一群具有相同数据类型的值。数组是单一类型的变量,它具有很多的隔室来存储很多值,而常规的变量只有一个存储隔室,所以只能存储一个值。但要引用所保持的所有值时,可以引用整个数组或是只引用数组的个别元素。
例如,若要存储一年中每天的支出,可以声明一个具有 365 个元素的数组变量,而不是 365 个变量。数组中的每一个元素都包含一个值。下列的语句声明数组变量 curExpense
具有 365 个元素。按照缺省规定,数组的索引是从零开始,所以此数组的上标界是 364 而不是 365。
Dim curExpense(364) As Currency
若要设置个别元素的值,必须指定元素的索引。下面的示例对于数组中的每个元素都赋予一个初始值 20。
Sub FillArray()
Dim curExpense(364) As Currency
Dim intI As Integer
For intI = 0 to 364
curExpense(intI) = 20
Next
End Sub
更改数组的底层绑定
可以在模块的顶部使用 Option Base 语句,将第一个元素的缺省索引值从 0 改成 1。在下面的示例中,Option Base 语句改变数组第一个组件的索引值,接着 Dim 语句声明数组变量 curExpense
具有 365 个元素。
Option Base 1
Dim curExpense(365) As Currency
也可以利用 To 子句来对数组的底层绑定做显示地声明,如下面的示例所示:
Dim curExpense(1 To 365) As Currency
Dim strWeekday(7 To 13) As String
在数组中存储 Variant 值
有两种方式可以创建 Variant 值的数组。第一种方式是声明 Variant 数据类型的数组,如下面的示例所示:
Dim varData(3) As Variant
varData(0) = "Claudia Bendel"
varData(1) = "4242 Maple Blvd"
varData(2) = 38
varData(3) = Format("06-09-1952", "General Date")
另一种方式是指定 Array 函数所返回的数组为一个 Variant 变量,如下示例所示。
Dim varData As Variant
varData = Array("Ron Bendel", "4242 Maple Blvd", 38, _
Format("06-09-1952", "General Date"))
对于元素类型为 Variant 的数组,可以利用索引来识别各元素,而不管用何种方式创建此数组。例如,下列的语句可以被加到上述的示例中。
MsgBox "Data for " & varData(0) & " has been recorded."
使用具有多重维数的数组
在 Visual Basic 中最多可以声明变量到 60 个维数。例如,下列的语句声明一个 5 乘 10 的两维数组。
Dim sngMulti(1 To 5, 1 To 10) As Single
如果将数组想成矩阵,则第一个参数代表行,而第二个参数代表列。
可以使用嵌套的 For...Next 语句去处理多重维数数组。下列的过程将一个两维数组的所有元素都填入 Single 值。
Sub FillArrayMulti()
Dim intI As Integer, intJ As Integer
Dim sngMulti(1 To 5, 1 To 10) As Single
' 用值填入数组。
For intI = 1 To 5
For intJ = 1 To 10
sngMulti(intI, intJ) = intI * intJ
Debug.Print sngMulti(intI, intJ)
Next intJ
Next intI
End Sub
source:VBA Help
来源:CSDN
作者:csdndscs
链接:https://blog.csdn.net/csdndscs/article/details/103927637