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

(В ответ на ваш конкретный вопрос о синтаксисе массива ответ "нет".)