-
一維數組
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)