下面的例程向您展示瞭如何使用我認爲是您需要的技術的鋸齒陣列變體。
我已經從工作表的前十行加載不同數量的單元格到TArray。我使用Debug.Print來顯示如何訪問元素。
Sub Test()
Dim InxCol As Integer
Dim InxRow As Integer
Dim InxTA As Integer
Dim TArray() As Variant
ReDim TArray(1 To 10)
With Sheets("xxxxx")
For InxTA = 1 To 10
' There must be at least two cells in each range if the result is to be an
' array. The access code relies on TArray being a true array of arrays.
' If this is not possible, you can test for TArray(N) being an array
' or a variable using VarType
TArray(InxTA) = .Range(.Cells(InxTA, 1), .Cells(InxTA, 12 - InxTA)).Value
Next
End With
For InxTA = 1 To 10
For InxRow = LBound(TArray(InxTA), 1) To UBound(TArray(InxTA), 1)
For InxCol = LBound(TArray(InxTA), 2) To UBound(TArray(InxTA), 2)
Debug.Print TArray(InxTA)(InxRow, InxCol) & " ";
Next
Next
Debug.Print
Next
End Sub
新材料
我已經決定了,所以我的答案是完整的補充解釋。
您可以將變體設置爲任何內容,然後將其設置爲其他內容。以下可能是愚蠢的,但它的工作原理:
Dim V As Variant
V = 5
Debug.Print V
V = "Today"
Debug.Print V
V = Array(1, 2, 3)
Debug.Print V(0) & " " & V(1) & " " & V(2)
考慮:Range(xxx).Value
如果xxx
是單細胞,它返回一個變量。在所有其他情況下,它返回一個二維數組。第一個維度是針對行的,第二個維度是針對列的。這是正常做法的反面,但它匹配Cells(R, C).Value
。
我已經聲明:
Dim TArray() As Variant
Redim TArray(1 to 10)
所以在tarray是變體
的陣列然後我設置TArray(N) = Range(xxx).Value
如果xxx
是單細胞,在tarray(N)將是一個單值。
但是,如果xxx
是兩個或更多個單元格,則TArray(N)是二維陣列。要訪問TArray中的單個單元格,我必須指定TArray的元素,然後指定範圍的行和列。因此:
TArray(Element)(Row, Column)
TArray的每個元素可以具有與每個其他元素不同的大小。一個可以是一個單一的變量,另一個單一的行範圍,另一個單一的列範圍和另一個矩形。
這很難讓你頭一下。不 - 刪除「首先」。玩這個功能。按照我所做的操作,從一個工作表中加載行,列和矩形。
有用的除了我的答案。我的正常做法是用解釋過重OP。我認爲這是我第一次說:「這是一種技巧,按你的意願使用它。」 – 2012-01-06 11:41:17