分享

VBA笔记:数组

 阿白mvo3hep7cv 2020-07-21

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 1Dim 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    NextEnd Sub 

2.多维数组

2.1 二维数组

VBA还支持 横向、纵向 同时存在的列表型数组,比如,我们声明一个3*20的数组
Dim SZ (1 to 3 , 1 to 20)
当然,也可以用个数来表示数组

Option Base 1Dim SZ(3,20) As String
2.2 三维数组

假设,有4个高3层、宽5格的货架,用数组可以这样来表示

Option Base 1Dim 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 nEnd Sub
3.2 数组赋值
方法1:使用Array函数

数组内,参数间用英文逗号分隔,参数支持数字、文本
数组的索引号默认从0开始,除非在模块中的第1句已经写入了'Option Base 1'语句

Sub ArrayTest() Dim arr As Variant '定义变量时,类型必须为Variant型 '110十个自然数赋值给数组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) + 1End 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~9End 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 = arrEnd Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多