Следующая процедура показывает вам, как использовать зубчатый массив вариантов, который, как я считаю, является необходимой вам техникой.
Я загрузил разное количество ячеек из первых десяти строк рабочего листа в 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 может иметь размер, отличный от любого другого элемента. Один может быть одной переменной, другой - диапазоном строк, другой - диапазоном столбцов и еще одним прямоугольником.
Поначалу это трудно обдумать. Нет - удалить "сначала". Играйте с этим функционалом. Делайте то, что я сделал, и загружайте строки, столбцы и прямоугольники из одной из ваших таблиц.