2016-10-23 15 views
2

私はVBAマクロに以下の機能を実装する方法を探しています。私は、動的に塗りつぶしたいサイズ(xx、yy)の2D配列を持っています。問題は、値を返す関数が1D配列を返すことです。 (1、yy)ではなく、逆のサイズ(yy、1)で表示されます。 fuctionによって返された配列を使って次の行を動的に割り当てる方法はありますか?機能を実装する擬似コードは、以下である:VBAの1次元配列を2次元配列に割り当てる

Dim X() As Double 
ReDim X(1 to xx, 1 to yy) 
Dim i As Long 

For i=1 To xx 
    X(i,)= FunctionReturningArrayOfSize(1 to yy, 1 to 1) 
Next i 

EDIT:ただ明確にする - 私の得られた配列Xの各行は(forループで)FunctionReturningArrayOfSizeの実行によって返されます。

+0

いいえ、Forループ以外の配列に配列の一部を割り当てる方法はありません。あなたは 'FunctionReturningArrayOfSize'配列' xx'回を繰り返そうとしていますか? – Slai

+0

はい、毎回xx回、戻って(yy、1)の配列を繰り返したいと思います。その結果、私は(xx、yy)配列を持ちたいと思う。 – Max

答えて

1

Excelを使用しているため、VBAのTranspose関数を使用できます。

Transposeは自動的に1Dアレイを2Dアレイに変換します。

Sub Test() 

    Dim a1D() As Variant 
    'Assign a 1D array 
    a1D = Array(1, 2, 3, 4, 5, 6) 

    Dim a2D As Variant 
    'Transpose to a 2D array 
    a2D = Application.WorksheetFunction.Transpose(a1D) 

End Sub 
1

1Dアレイを2D Rangeに割り当てることはできますが、別のアレイの一部に割り当てることはできません。

Dim X() ' has to be Variant array 
With Range("A1").Resize(xx, yy) 
    .Value2 = FunctionReturningArrayOfSize(1 to yy, 1 to 1) 
    X = .Value2 ' or X = WorksheetFunction.Transpose(.Value2) to rotate it 
End With 
+0

この方法でforループを組み込む方法はありますか? – Max

+0

@Maxこの例のポイントは、ループなしでFunctionReturningArrayOfSize xx回のyy値を繰り返すことです。 Forループの例を行、列、またはセルで欲しいですか? – Slai

関連する問題