1

配列の配列を作成する関数が 1 つと、結果の配列を取得してスプレッドシートに書き込む関数が 1 つあります。配列の配列を 2 番目の関数に渡すための構文が見つかりません...助けていただけますか?

たとえば、arr1 と arr2 にそれぞれ 24 個のアイテムが含まれている場合 (常に同じ量のアイテムが含まれている)、結果の配列をサイズ 24 x 2 の 2 次元配列にし、結果の 2 x 24 テーブルに書き込む必要があります。スプレッドシート、たとえば範囲 A1:B24

これが私のコードです:

配列の配列を作成する関数:

Function GetCellDetails(dict1 As Dictionary, dict2 As Dictionary)   As Variant

Dim arr1, arr2
arr1 = dict1.Items
arr2 = dict2.Items

GetCellDetails = Array(arr1, arr2)

End Function

それをスプレッドシートに書き込む関数:

Sub WriteCellDataToMemory(arr As Variant, day As Integer, cellId As Integer, nCells As Integer)
row = CellIdToMemRow(cellId, nCells)
col = DayToMemCol(day)

arrSize = UBound(arr, 2) 'compiler error
Range(Cells(row, col), Cells(row + arrSize , col + 2)) = Application.Transpose(arr)

End Sub

関数を呼び出すコード:

Dim CellDetails
CellDetails = GetCellDetails(dict1, dict2)
WriteCellDataToMemory CellDetails, day, cellId, nCells

でコンパイラ エラーが発生しています: arrSize = UBound(arr, 2)、コンパイラは arr が 2 次元配列であることを認識していないためです... ありがとう、Li

4

1 に答える 1

3

作成されたCellsDetailsは、実際には 1 次元配列です。Ubound(arr)仕事をします。

Sub Main()

    Cells.ClearContents

    Dim d1 As New Dictionary
    Dim d2 As New Dictionary

    d1.Add 1, "1"
    d1.Add 2, "2"
    d2.Add 3, "3"
    d2.Add 4, "4"

    Dim CellDetails
    CellDetails = GetCellDetails(d1, d2)

    WriteCellDataToMemory CellDetails

End Sub

Function GetCellDetails(dict1 As Dictionary, dict2 As Dictionary) As Variant

Dim arr1, arr2
arr1 = dict1.Items
arr2 = dict2.Items

GetCellDetails = Array(arr1, arr2)

End Function

Sub WriteCellDataToMemory(arr As Variant)

    Dim arrSize As Long
    arrSize = UBound(arr)
    Range(Cells(1, 1), Cells(1 + arrSize, arrSize+1)) = Application.Transpose(arr)

End Sub

イラストがわかりやすいかも

ここに画像の説明を入力

だからあなたは多次元obj1を持っていますobjX

それらをオブジェクトとして格納する1次元配列に貼り付けます

于 2013-11-05T15:58:31.093 に答える