以下例程向您展示了如何使用锯齿状的变体数组,我认为这是您需要的技术。
我已将工作表前十行中不同数量的单元格加载到 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 的每个元素都可以具有与其他元素不同的大小。一个可以是单个变量,另一个可以是单个行范围,另一个可以是单个列范围,还有一个是矩形。
一开始很难理解。否 - 删除“起初”。玩这个功能。做我所做的并从您的一个工作表中加载行、列和矩形。