VBA學習筆記(4)--數組和單元格互相轉換


說明(2017.3.23):

1. VBA的數組還是很難用的,其實就是非常難用!

2. 要先定義一個數組,可以是空的,也可以里面寫個數字作為數組長度。

3. 如果是空數組,可以后面redim重新定義數組長度。如果不是空的,再用redim就會報錯“數組維數已定義”!

4. dim里面不能用變量,報錯“只能用常數表達式”,里面只能用具體數字。

5. redim不能重新定義數組維數,就是說本來dim了一個一維數組,redim不能把它改成二維數組。

6. redim里面貌似能用變量。

7. 兩種方法,一種定義一維數組,需要結果transpose轉成行。另一種定義二維數組,結果直接寫入單元格。

總結:

1. VBA的數組超級難用,用過的最難用的!

 1 '第一種方法,定義一個一維數組,存放乘積,用transpose換成列后,寫入單元格
 2 Public Sub test()
 3     Dim arr()
 4     arr = Range("a7: b24")
 5     arrNum = UBound(arr)
 6 '    如果arr2是個一維數組,后面要用transpose列轉行
 7     Dim arr2()
 8     ReDim arr2(1 To UBound(arr, 1))
 9     
10     For i = 1 To UBound(arr, 1)
11         arr2(i) = arr(i, 1) * arr(i, 2)
12     Next
13 '    resize從這個單元格往下數多少行,第二個參數是多少列
14 '    transpose把arr2的列轉成行
15     Range("e7").Resize(UBound(arr2), 1) = Application.Transpose(arr2)
16 End Sub
17 '第二種辦法,定義一個二維數組,存放乘積,直接寫入單元格
18 Public Sub test2()
19     Dim arr()
20     arr = Range("a7: b24")
21     arrNum = UBound(arr)
22 '    如果arr2一開始就定義為二維數組,后面就不用轉成行了
23     Dim arr2(1 To 18, 1 To 1)
24 '    本來想用變量作為數組大小,不過好像不支持,redim也不能含有變量,而且不能重新定義二維數組
25 '    ReDim arr2(1 To 18,1 To 2)
26 
27     For i = 1 To UBound(arr, 1)
28         arr2(i, 1) = arr(i, 1) * arr(i, 2)
29     Next
30 '    resize從這個單元格往下數多少行,第二個參數是多少列
31     Range("e7").Resize(UBound(arr2), 1) = arr2
32 End Sub

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM