возвращает целую строку многомерного массива в VBA в одномерный массив

есть ли способ, чтобы вернуть значение всей строки многомерного массива в одномерный массив в VBA?

что-то вроде arr_1dim = arr_2dim(3,:) является выражением matlab для назначения строки 3 из arr_2dim массива arr_1dim в одном перегоне.

есть ли аналогичный менее дорогой метод в Excel VBA?

5 ответов


нет нет VBA-функции для получения строки или столбца. Вы можете только написать его сами, или посмотрите здесь:
http://www.cpearson.com/excel/vbaarrays.htm


существует простой способ получить столбец или строку двумерного массива. Назначьте ноль столбцу, чтобы получить строку, или назначьте ноль строке, чтобы получить столбец, таким образом:

Application.WorksheetFunction.Index(array, 0, columnyouwant) /* or */
Application.WorksheetFunction.Index(array, rowyouwant, 0)

см. здесь: как разрезать массив в Excel VBA?


Это то, что я делаю, чтобы легко распечатать одно измерение многомерного массива.

в принципе, я определяю новый массив 1D и заполняю его значениями из большего массива.

пример (3D до 1D для распечатки):

Sub PrintItOut()
     ReDim big_array(10,5,n) as Variant, small_array(n) as Variant

     'use multidimensional array


     'place multi-dimensional values into the 1D array

     For i = 0 to n
            small_array(i) = big_array(0, 0, i)
     Next

     Range(Cells(1, 1), Cells(1, n + 1)) = small_array
End Sub

вот как я это делаю. Я надеюсь, что это имеет смысл для тех, кто может его читать. Я думаю, это очень простой способ сделать это.


Matlab - такое потрясающее приложение для работы, когда дело доходит до матриц, массивов, векторов... ;) Но Excel не так уж плох, он тоже основан на матрице.

так что если вы не хотите, чтобы перебрать. Вы можете просто ouput ваш multi-D array в рабочий лист с помощью


поскольку у меня недавно был этот вопрос, я хочу поделиться своим кодом. Я написал готовую к использованию функцию, где вы можете выбрать, хотите ли вы извлечь столбец или строку:

'*** Modul 1, define function ***

Function getOneLine(array2D As Variant, lineIndex As Integer, choice As String) As Variant
' returning one column or row of a 2D array
' array2D: 2 dimensional Array
' lineIndex: the index of column or row, starting at 0
' choice: "c" for column or "r" for row

    Dim i, n As Integer
    Dim oneLine As Variant


    If choice = "c" Then

    n = UBound(array2D, 2)
    ReDim oneLine(n)

        For i = 0 To n
            oneLine(i) = array2D(lineIndex, i)
        Next

    getOneLine = oneLine

    End If


    If choice = "r" Then

    n = UBound(array2D, 1)
    ReDim oneLine(n)

        For i = 0 To n
            oneLine(i) = array2D(i, lineIndex)
        Next

    getOneLine = oneLine

    End If

End Function


'*** Modul 2, call function ***

Sub SomeProcess()
    ' Creating a 3x2 Matrix
    ' (In VBA-arrays the column is indexed before the rows
    '  starting at 0. So 3x2 looks like 1x2)
    Dim SomeArray(1, 2) As Variant
        SomeArray(0, 0) = 1
        SomeArray(0, 1) = 2
        SomeArray(0, 2) = 3
        SomeArray(1, 0) = 4
        SomeArray(1, 1) = 5
        SomeArray(1, 2) = 6

    Dim oneLine As Variant
        oneLine = getOneLine(SomeArray, 1, "c")

    Debug.Print oneLine(2)
        ' prints 6

End Sub