VBA二维数组的基础介绍

既然你已经知道了如何有规划地产生一个清单(一维数组),是时候仔细看一下如何使用数据表了。下面的过程产生一个二维数组,储存国家名称,货币名称和交换汇率。

Sub Exchange()
Dim t As String
Dim r As String
Dim Ex(3, 3) As Variant
t = Chr(9) tab
r = Chr(13) Enter
Ex(1, 1) = "Japan"
Ex(1, 2) = "Yen"
Ex(1, 3) = 128.2
Ex(2, 1) = "Mexico"
Ex(2, 2) = "Peso"
Ex(2, 3) = 9.423
Ex(3, 1) = "Canada"
Ex(3, 2) = "Dollar"
Ex(3, 3) = 1.567
MsgBox "Country " & t & t & "Currency" & t & "per US$" _
& r & r _
& Ex(1, 1) & t & t & Ex(1, 2) & t & Ex(1, 3) & r _
& Ex(2, 1) & t & t & Ex(2, 2) & t & Ex(2, 3) & r _
& Ex(3, 1) & t & t & Ex(3, 2) & t & Ex(3, 3), , _
"Exchange"
End Sub

当你运行过程Exchange时,你将看到一个信息框,显示三列信息(见图7-2)

VBA二维数组的基础介绍

图7-2 显示在信息框上的文本是可以自定义格式的。

数组的维数:

Sub 数组示例():

Dim x As Long, y As Long
Dim arr(1 To 10, 1 To 3) 创建一个可以容下10行3列的数组空间
For x = 1 To 4
    For y = 1 To 3
        arr(x, y) = Cells(x, y) 通过循环把单元格区域a1:c4的数据装进数组中
    Next y
Next x
MsgBox arr(4, 3) 根据提供的行数和列数显示数组
arr(1, 2) = "我改一下试试"你可以随时修改数组内指定位置的数据
MsgBox arr(1, 2)
End Sub

总结:二维是由行和列表示的数组,如 ARR(3,2)表示数组中第3排第2列的元素。而一维数组只是由一个元素决定,如ARR(4)表示数组中第4个元素

静态和动态数组

到目前为止,本章介绍的都是静态数组。静态数组是具有确定大小的数组。当你事先知道数组的大小时使用静态数组。静态数组的大小是在数组的声明语句里确定的,例如,语句 DimFruits(10)AsString 声明了一个由10个成员组成的叫做 Fruits 的静态数组。

但是,万一你不肯定你的数组会包含多少个成员呢?如果你的过程由用户输入决定,每次程序执行时,用户提供的成员数可能会变化的。你如果确保你声明的数组不会浪费内存呢?

回想你声明了一个数组后,VBA 会留出足够的内存来储存数组。如果你声明一个比你需要的更多成员的数组的话,你将浪费计算机资源。这个问题的解决方法是让你的数组变为动态的。动态数组是大小可以改变的数组。如果数组的大小每次都由程序运行而决定的话,就使用动态数组。
1.  在当前工程里插入一个新模块并且重新命名为 DynamicArrays
2.  输入下列过程 DynArray:
Sub DynArray( )
Dim counter As Integer
declare a dynamic array
Dim myArray( ) As Integer
specify the initial size of the array
Redim myArray(5)
Workbooks.Add
populate myArray with values
For counter = 1 to 5
myArray(counter) = counter +1
ActiveCell.Offset(counter-1, 0).Value = myArray(counter)
Next
change the size of myArray to hold 10 elements
Redim Preserve myArray(10)
add new values to myArray
For counter = 6 To 10
myArray(counter) = counter * counter
With ActiveCell.Offset(counter-1, 0)
.Value = myArray(counter)
.Font.Bold = TrueEnd with
Next counter
End Sub
3.  将你的 Excel 窗口和 VB 编辑器窗口并排显示
4.  逐步运行过程 DynArray。你可以将鼠标置于代码中间,并且按下F8来执行逐条语句。程序
DynArray 的结果如下图所示。
VBA二维数组的基础介绍
图7-3 显示10个数据的数组
在过程 DynArray 里,Dim myArray() As Integer 语句声明了一个叫做 myArray 的动态数组。尽管该语句声明了数组,但是,没有分配任何内存给该数组。第一条 ReDim 语句明确了 myArray 的开始大小并且占据了10个字节的内存让它储存5个成员,正如你所知,每个整型数据需要两个字节的内存。
语句 Workbooks.Add 打开一新工作簿,然后 For…Next 循环用数据填充数组 myArray 并且将数组的成员写入工作表。在循环开始之前,变量 counter 等于1。循环里的第一条语句:
myArray(counter) = counter + 1

分配数值2给 myArray 的第一个成员。第二条语句:

ActiveCell.Offset(counter-1, 0).Value = myArray(counter)

将 myArray 成员的值输入到当前单元格里。当前单元格为A1。因为变量 counter 等于1,所以上面的语句就等于:

ActiveCell.Offset(1-1, 0).Value = myArray(1)

或者

ActiveCell.Offset(0,0).Value = myArray(1)

上面的语句在单元格A1里输入数据。循环里面的语句被执行5次。VB在合适的工作表单元格里马输入数据并且进行到下一语句:

ReDim Preserve myArray(10)

通常,当你改变一个数组的大小时,你将失去该数组原来的所有数据。语句 ReDim 将数组重新初始化。然而,你可以将新成员加入到现存的数组里去,通过在语句 ReDim 后面带上关键字 Preserve。换句话说,关键字 Preserve 保证重新改变大小的数组不会弄丢现有的数据。如果你忽略它,新数组将会
是空的。

第二个 For…Next 循环给数组 myArray 的第六,第七,第八,第九和第十个成员赋值。这次,数组成员的数值是相乘的:counter * counter。VB使用粗体将数组其它的数值输入到合适的工作表的单元格里面。
技巧:确定数组大小
在使用数组之前,必须在 Dim 或 ReDim 语句里确定数组的大小。这意味着你不可以给数组成员赋值,直到你使用 Dim 或者 ReDim 语句声明了该数组。

作者:andy,如若转载,请注明出处:https://www.web176.com/vba/20246.html

(0)
打赏 支付宝 支付宝 微信 微信
andy的头像andy
上一篇 2023年5月15日
下一篇 2023年5月15日

相关推荐

发表回复

登录后才能评论