1.单维数组
1.1 声明数组
声明1个1~50的数组,可以将区间值写出来
Dim SZ(1 To 50) As String
也可以用"个数"来标识,比如上述的1 to 50
可以用49
来替代(0~49的意思,总计50个数字)
Dim SZ(49) As String
我们还可以模块的开始,就设定好数组的索引值从1开始(1~50)
Option Base 1
Dim SZ(50) As String
1.2 数组赋值
当数组声明好了之后,我们可以给数组赋值
比如,给数组的第15个元素赋值的方法如下:
SZ(14) = "100"
给一个数组集体赋值的方式:
Sub ShuZu()
Dim SZ(1 To 10) As Integer, i As Integer
For i = 1 To 10
SZ(i) = i
Next
End Sub
2.多维数组
2.1 二维数组
VBA还支持 横向、纵向 同时存在的列表型数组,比如,我们声明一个3*20的数组
Dim SZ (1 to 3 , 1 to 20)
当然,也可以用个数来表示数组
Option Base 1
Dim SZ(3,20) As String
2.2 三维数组
假设,有4个高3层、宽5格的货架,用数组可以这样来表示
Option Base 1
Dim SZ(4,3,5) As String
2.3 多维数组的赋值方式
与单维数组的赋值方式一样
Sub dwsz()
Dim SZ(3,2,4)As String
SZ(1,2,3) = "Max"
End Sub
3.动态数组
3.1 声明数组
当无法确定数组的存储元素多少时,我们可以先声明一个空的数组:
Dim SZ ()
然后,再通过ReDim语句来重新声明数组的大小
Sub dtsz()
'定义数组
Dim arr() As String
Dim n As Long
'统计A列有多少非空单元格
n = Application.WorksheetFunction.CountA(Range("A:A"))
ReDim arr(1 To n) As String '重新定义数组的大小
MsgBox n
End Sub
3.2 数组赋值
方法1:使用Array函数
数组内,参数间用英文逗号分隔,参数支持数字、文本
数组的索引号默认从0开始,除非在模块中的第1句已经写入了"Option Base 1"语句
Sub ArrayTest()
Dim arr As Variant '定义变量时,类型必须为Variant型
'将1到10十个自然数赋值给数组arr
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
MsgBox "arr数组的第2个元素为" & arr(1)
End Sub
方法2:使用Split函数
数组内,参数间用英文逗号分隔,参数仅支持文本(需要确认)
Sub SplitTest()
Dim arr As Variant
arr = Split("Lee,Chen,Zhang,Kong,Feng,Mi", ",")
MsgBox "arr数组的第2个元素为:" & arr(1)
End Sub
数组的索引号默认从0开始,无论是否已写入"Option Base 1"语句
方法3:使用Range函数
可以把一个单元格区域的值存到数组里,也可以把数组里的值写到单元格里去(单元格区域的大小必须一致)
Sub RngArr()
Dim arr As Variant
arr = Range("A1:B2").Value '将A1:B2单元格的内容存到数组arr里
Range("C1:D2").Value = arr '将arr的数据写入到C1:D2单元格里去
End Sub
4.数组的其他操作
4.1 数组索引(UBound、LBound)
通过UBound和LBound函数,可以计算数组的最大、最小索引号
UBound(arr)
‘返回数组的最大索引号
LBound(arr)
‘返回数组的最小索引号
UBound(arr) - LBound(arr) +1
‘返回数组一共有多少个元素
Sub arrcount()
Dim arr(49)
MsgBox "数组的最大索引号是:" & UBound(arr) & Chr(13)
& "数组的最小索引号是:" & LBound(arr) & Chr(13)
& "数组的元素个数是:" & UBound(arr) - UBound(arr) + 1
End Sub
如果是一个多位数组,还需要指定数组的维度,比如:
Sub arrcount2()
Dim arr(49, 100)
MsgBox "第1维的最大索引是:" & UBound(arr, 1) & Chr(13) & "第2维的最小索引是:" & LBound(arr, 2)
End Sub
4.2 数组拼接(join)
使用join函数,可以将数组里的所有元素,通过一个指定的拼接符号,拼成一个新的字串
Sub JoinTest()
Dim arr As Variant, txt As String
arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
txt = Join(arr, "~")
'如果省略分割符,则默认使用空格作为分割符号
MsgBox txt
'最终输出结果:0~1~2~3~4~5~6~7~8~9
End Sub
4.3 将数组写入单元格(range)
使用range函数,可以将数组写入单元格、区域
Sub ArrToRng()
Dim arr As Variant
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
'将数组的第3个元素写入单元格A1
Range("A1").Value = arr(3)
'将数组批量写入单元格(横向)
Range("B1", "J1").Value = arr
'将数组批量写入单元格(纵向)
Range("A2:A10").Value = Application.WorksheetFunction.Transpose(arr)
End Sub
无论1维数组还是2维数组,在写入单元格区域时,区域的大小,与数组的大小需要保持一致
Sub ArrToRng2()
Dim arr(2, 3) As String
arr(1, 1) = 1
arr(1, 2) = "A"
arr(1, 3) = "a"
arr(2, 1) = 2
arr(2, 2) = "B"
arr(2, 3) = "b"
Range("A1:C2").Value = arr
End Sub