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