Excel中VBA數(shù)組與單元格區(qū)域的相互轉(zhuǎn)換
在使用VBA批量操作Excel工作表單元格區(qū)域時(shí),經(jīng)常會遇到將單元格區(qū)域轉(zhuǎn)換為VBA數(shù)組的需求,同樣也會遇到將VBA數(shù)組輸出到單元格區(qū)域的情況。本文將介紹VBA數(shù)組與單元格區(qū)域的相互轉(zhuǎn)換方法。 1.
在使用VBA批量操作Excel工作表單元格區(qū)域時(shí),經(jīng)常會遇到將單元格區(qū)域轉(zhuǎn)換為VBA數(shù)組的需求,同樣也會遇到將VBA數(shù)組輸出到單元格區(qū)域的情況。本文將介紹VBA數(shù)組與單元格區(qū)域的相互轉(zhuǎn)換方法。
1. 單元格區(qū)域
單元格區(qū)域指至少包含兩個(gè)單元格的區(qū)域,單獨(dú)的單元格不算是單元格區(qū)域。
2. 一維水平數(shù)組
一維水平數(shù)組指數(shù)組的值在Excel單元格區(qū)域中按照水平方向輸出,即按照Excel列的順序輸出。
3. 一維垂直數(shù)組
一維垂直數(shù)組指數(shù)組的值在Excel單元格區(qū)域中按照垂直方向輸出,即按照Excel行的順序輸出。
4. 將單元格區(qū)域轉(zhuǎn)換為VBA數(shù)組
當(dāng)將單元格區(qū)域轉(zhuǎn)換為VBA數(shù)組時(shí),該數(shù)組變量必須是Variant類型,生成的數(shù)組是二維數(shù)組,下界是1,不受Option Base語句的影響。其中,第一維表示單元格區(qū)域的行方向,第二維表示單元格區(qū)域的列方向。
Sub xyf()
' 定義一個(gè)變量用于存放單元格區(qū)域的值
' 未指定類型默認(rèn)為Variant類型
Dim arr
arr Range("A1:A2")
' 也可以先定義一個(gè)Variant類型的動態(tài)數(shù)組變量
Dim arr1()
arr1 Range("A1:A2")
' 生成的數(shù)組的維數(shù)為(1 to 2, 1 to 1)
End Sub
5. 由Array函數(shù)生成的一維水平數(shù)組
使用Array函數(shù)生成的數(shù)組是一維水平數(shù)組,可以直接賦值給水平的單元格區(qū)域。
Sub xyf()
Dim arr()
arr Array(1, 2, 3)
Range("A1:C1") arr
End Sub
6. 降維轉(zhuǎn)換為一維數(shù)組
由于將單元格區(qū)域轉(zhuǎn)換為VBA數(shù)組時(shí),生成的數(shù)組是二維數(shù)組,內(nèi)置的VBA數(shù)組函數(shù)都是針對一維數(shù)組,所以需要將二維數(shù)組降維轉(zhuǎn)換為一維數(shù)組。
7. 單列多行的單元格區(qū)域轉(zhuǎn)換為一維水平數(shù)組
當(dāng)將單列多行的單元格區(qū)域賦值給數(shù)組變量后,可以使用函數(shù)將數(shù)組轉(zhuǎn)置降為一維水平數(shù)組。
Sub xyf()
Dim arr()
' 以下語句產(chǎn)生二維的arr(1 to 8, 1 to 1)數(shù)組
arr Range("A1:A8")
' 通過轉(zhuǎn)置降為一維的arr(1 to 8)數(shù)組
arr (arr)
End Sub
8. 單行多列的單元格區(qū)域轉(zhuǎn)換為一維水平數(shù)組
當(dāng)將單行多列的單元格區(qū)域賦值給數(shù)組變量后,可以兩次使用函數(shù)將數(shù)組降維轉(zhuǎn)換為一維水平數(shù)組。
Sub xyf()
Dim arr()
' 以下語句產(chǎn)生二維的arr(1 to 1, 1 to 3)數(shù)組
arr Range("A1:C1")
' 通過兩次轉(zhuǎn)置降為一維的arr(1 to 3)數(shù)組
arr ((arr))
End Sub
9. 多行多列的單元格區(qū)域轉(zhuǎn)換為一維水平數(shù)組
當(dāng)將多行多列的單元格區(qū)域賦值給數(shù)組變量后,可以使用函數(shù)的行參數(shù)將二維數(shù)組的每行轉(zhuǎn)換為一維水平數(shù)組。
Sub xyf()
Dim arr()
Dim arrTemp()
' 以下語句產(chǎn)生二維的arr(1 to 5, 1 to 3)數(shù)組
arr Range("A1:C5")
' 定義一個(gè)與arr數(shù)組一維尺寸相同的一維數(shù)組變量用于存放提取出來的每行一維數(shù)組的結(jié)果
ReDim arrTemp(1 To UBound(arr))
For i 1 To UBound(arr)
' 函數(shù)的第二參數(shù)指定行數(shù)生成一維數(shù)組
arrTemp(i) Join((arr, i), ",")
Next
End Sub
10. 列參數(shù)不能直接降維
在使用函數(shù)將二維數(shù)組降維時(shí),只有通過行參數(shù)才可以直接降維,通過列參數(shù)是不能直接降維的。
Sub xyf()
Dim arr()
Dim arrTemp()
' 以下語句產(chǎn)生二維的arr(1 to 5, 1 to 3)數(shù)組
arr Range("A1:C5")
' 生成一維數(shù)組(1 to 3)
arrTemp (arr, 1)
' 生成一維數(shù)組(1 to 3)
arrTemp (arr, 1, 0)
' 通過Index的列參數(shù)不能降維, arrTemp還是二維數(shù)組(1 to 5, 1 to 1)
arrTemp (arr, 0, 1)
End Sub