ХОРОШО. Я думаю, вы просто неправильно назначаете массивы y
. Как я упоминал в комментариях:
y(k) = x(i,j)
ТОЛЬКО сохраняет значение, представленное координатами i/j в массиве x
.
Чтобы y(k)
ссылался на весь массив x
в то время, вы должны сделать:
y(k) = x
Если это все еще не работает, возможно, что-то еще не так. Вот пример, где у меня есть массив 2x2 (база 0) с именем baseArray
, который я явно заполняю некоторыми значениями. Я итерирую от i = 0 to itLimit
, и в каждой итерации я перебираю элементы в массиве, умножая значения на 2 и сохраняя в переменной массива tmpArray
. После преобразования значений я сохраняю их в arrContainer
и перехожу к следующей For i = 0 to itLimit
итерации.
Sub FunWithArrays()
Dim itLimit As Integer '## Iteration limit.'
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim baseArray(2, 2) As Variant '## an example array.'
'## Put some dummy data in this array.'
baseArray(0, 0) = 1
baseArray(0, 1) = 65
baseArray(0, 2) = 13
baseArray(1, 0) = 14
baseArray(1, 1) = 29
baseArray(1, 2) = 44
baseArray(2, 0) = 9
baseArray(2, 1) = 16
baseArray(2, 2) = 33
Dim tmpArray(2, 2) As Variant '## This will temporarily hold values as we transform them.'
Dim arrContainer() As Variant '## an array of arrays, to store the iteration arrays.'
itLimit = 2 '## set a max iteration.'
For i = 0 To itLimit
'## Transform the base array somehow'
For j = LBound(baseArray, 1) To UBound(baseArray, 1)
For k = LBound(baseArray, 2) To UBound(baseArray, 2)
tmpArray(j, k) = baseArray(j, k) * 2
Next
Next
ReDim Preserve arrContainer(i)
arrContainer(i) = tmpArray
Next
Dim y As Variant
'## Now, refer to a single iteration stored in the arrContainer variable:
y = arrContainer(2)
End Sub
На этом первом снимке экрана я использую окно Locals
для просмотра переменных и того, что они содержат. После первой итерации вы можете видеть, что tmpArray
было заполнено и имеет те же размеры, что и baseArray
, но значения в нем были умножены на 2.
Изучив переменную arrContainer
, мы видим, что она имеет только 1 элемент, и этот элемент представляет собой массив, равный tmpArray
, который мы создали на итерации выше.
После последней итерации мы можем просмотреть arrContainer
и увидеть, что он содержит 3 элемента (от 0 до 2, согласно нашему циклу For i to itLimit
). Каждый массив внутри arrContainer
равен одному из массивов, созданных на предыдущей итерации.
Теперь мы можем ссылаться на эти элементы, например:
Dim y as Variant
y = arrContainer(2) '# or any in bounds index could be used instead of "2"'
И, наконец, использование окна VBE Locals для просмотра y
:
person
David Zemens
schedule
27.04.2013
x(i,j)
,i
иj
представляют границы этого массива? Илиx
представляет собой массив массивов, один из дочерних массивов которого идентифицируется индексом(i,j)
? - person David Zemens   schedule 27.04.2013y(k) = x(i,j)
, происходит то, что вы ТОЛЬКО сохраняетеy(k)
как одно значение (элемент, представленный координатами i/j в массивеx
). - person David Zemens   schedule 27.04.2013y(k)
, вы просто делаетеy(k) = x
во время итерации. - person David Zemens   schedule 27.04.2013y(20)
? Кроме того, всегда полезно опубликовать весь код, а не только его часть. Как бы то ни было, проблема может быть где-то еще в вашем коде, который я не вижу. Я приведу пример, показывающий, что я имею в виду... - person David Zemens   schedule 27.04.2013