VBA(二)数组学习


  • 一维数组

Sub test()
    '创建一维数组
    Dim arr As Variant
    
    arr = Array("a", "b", "c", "d")
    
    MsgBox arr(1) '弹出 b
    
End Sub

Sub test2()
    '创建一维数组
    
    Dim arr(3)  As Variant '或定义arr(0 To 3),从0开始,共四个元素
    
    arr(0) = "a"
    arr(1) = "b"
    arr(2) = "c"
    arr(3) = "d"
    
    MsgBox arr(1) '弹出 b
    
End Sub

 *** 一维数组映射到excel单元格上的位置

  • 二维数组

Sub test3()
    '创建二维数组
    Dim arr(1 To 3, 1 To 3)
    
    arr(1, 1) = "a1"
    arr(1, 2) = "b1"
    arr(1, 3) = "c1"

    arr(2, 1) = "a2"
    arr(2, 2) = "b2"
    arr(2, 3) = "c2"

    arr(3, 1) = "a3"
    arr(3, 2) = "b3"
    arr(3, 3) = "c3"
    '这里可以用for循环装入值
    
    MsgBox arr(3, 3) '弹出 c3
    
End Sub

Sub test4()
    '单元格创建数组
    Dim arr() As Variant
    
    arr() = Range("A1:C3") '类似 a(1 to 3, 1 to 3)
    
    MsgBox arr(3, 3) '弹出 c3
    
End Sub

*** 二维数组映射到excel单元格上的位置

 

  • 动态数组

    Dim定义了数组的长度后就不能改变了(动态数组会先Dim一个空的数组如:Dim arr() as variant )。不能改变长度的数组,易出现浪费或不足的现象。动态数组的出现解决了这一问题;

      ReDim:可以更新数组的长度,但清空原数组的数据;

      ReDim PreServe:可以更新数组的长度,且保留原数组的数据;

  一维动态数组

Sub test5()
    '动态数组(保留)
    Dim arr() As Byte
        
    Dim i As Integer
    
    For i = 1 To 3 Step 1
    
        ReDim Preserve arr(i)
        
        arr(i) = i
        
    Next
    
    MsgBox arr(3)
    
End Sub
Sub test6()

    '动态数组(清空)
    
    Dim arr() As Byte
        
    Dim i As Integer
    
    For i = 1 To 3 Step 1
    
        ReDim arr(i)
        
        arr(i) = i
        
    Next
    
    MsgBox arr(2)
    
End Sub

  二维动态数组

     二维动态数组只有最后一维的长度是可以变化的

Sub test7()

    '二维动态数组
    
    Dim arr() As Variant

    Dim i As Integer
    
    For i = 1 To 3 Step 1
        
        ReDim Preserve arr(1 To 1, 1 To i)
        
        arr(1, i) = i
        
    Next
    
    MsgBox arr(1, 3)
    
End Sub
  • 数组的几种方法

   数组转置Transpose(arr)

  数组写入函数的方式即行列的转换

Sub test8()
    '一维数组转置
    
    Dim arr(1 To 3) As String
    
        arr(1) = "a"
        arr(2) = "b"
        arr(3) = "c"
    
    Range("A1:A3") = Application.Transpose(arr)
    
End Sub

  结果如下:

  

  *** 数组数据溢出单元格时,在数组长度范围内的会自动填充数据同一维数据,超出数组长度的填充报错;

Sub test9()
    '二维数组转置
    Dim arr(1 To 3, 1 To 3)
    
    arr(1, 1) = "a1"
    arr(1, 2) = "b1"
    arr(1, 3) = "c1"

    arr(2, 1) = "a2"
    arr(2, 2) = "b2"
    arr(2, 3) = "c2"

    arr(3, 1) = "a3"
    arr(3, 2) = "b3"
    arr(3, 3) = "c3"
    
    Range("A1:C3") = Application.Transpose(arr)

End Sub

  结果如下:

  

 

   *** 数组数据溢出单元格,填充报错;

  获取数组的长度

  获取一维数组的下标:LBound(arr,1)

  获取一维数组的上标:UBound(arr,1)

    


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM