VBA, вставляющий 3-мерный массив в лист
4 Michael [2010-06-19 01:35:00]
У меня 3-мерная матрица (5 x 5 x 3), и мне нужно отправить (5 x 5 x 1) в Sheet1 (5 x 5 x 2) в Sheet2 (5 x 5 x 3) в Sheet3, Поскольку я создаю этот трехмерный массив внутри 3 вложенных циклов, я не могу использовать цикл for для доступа к (5 x 5) части цикла. Есть ли какой-либо идентификатор, который говорит excel индексировать все элементы массива, например, в MatLab, используя (1: конец, 1: конец, 1)? Базовый код ниже:
Sub practice_2()
Dim arr(1 To 5, 1 To 5, 1 To 3)
Dim a As Integer
Dim x As Integer
Dim y As Integer
For a = 1 To 3
For x = 1 To 5
For y = 1 To 5
arr(x, y, a) = x * y
Next
Next
Sheets(a).Select
'Following line is where I want to access the (5 x 5 x 1) array
Range(Cells(1, 1), Cells(5, 5)) = arr
Next
End Sub
vba multidimensional-array excel
1 ответ
6 Решение jtolle [2010-06-19 04:56:00]
Не так много можно сделать непосредственно с трехмерным массивом в Excel. Однако варианты VBA довольно гибкие. Вы можете получить то, что хотите, используя 1-D массив, содержащий 2-D массивы вместо 3-мерного массива:
Dim arr(1 To 3)
Dim a As Integer
Dim x As Integer
Dim y As Integer
For a = 1 To 3
ReDim inner(1 To 5, 1 To 5)
'don't worry...makes a copy
arr(a) = inner
For x = 1 To 5
For y = 1 To 5
arr(a)(x, y) = a * x * y
Next
Next
Sheets(a).Select
Range(Cells(1, 1), Cells(5, 5)) = arr(a)
Next
(В ответ на ваш конкретный вопрос о синтаксисе массива ответ "нет".)