VBA вставляет трехмерный массив в лист - PullRequest
4 голосов
/ 19 июня 2010

У меня есть трехмерный массив (5 x 5 x 3), и мне нужно разместить (5 x 5 x 1) на Sheet1, (5 x 5 x 2) на Sheet2, (5 x 5 x 3) на Sheet3 , Поскольку я строю этот 3-мерный массив внутри 3-х вложенных циклов for, я не могу использовать цикл for для доступа к (5 x 5) части цикла. Есть ли какой-нибудь идентификатор, который говорит Excel, чтобы индексировать все элементы массива, например, в MatLab, используя (1: end, 1: end, 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 

1 Ответ

6 голосов
/ 19 июня 2010

Мало что можно сделать напрямую с помощью трехмерного массива в Excel. Тем не менее, варианты VBA довольно гибки. Вы можете получить то, что хотите, используя 1-D массив, который содержит 2-D массивы вместо 3-D массива:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...