多次元配列の行全体の値を VBA の 1 次元配列に返す方法はありますか?
のようなもの は、配列の行 3 を一度arr_1dim = arr_2dim(3,:)
に割り当てるための matlab 式です。arr_2dim
arr_1dim
Excel VBAで同様の安価な方法はありますか?
多次元配列の行全体の値を VBA の 1 次元配列に返す方法はありますか?
のようなもの は、配列の行 3 を一度arr_1dim = arr_2dim(3,:)
に割り当てるための matlab 式です。arr_2dim
arr_1dim
Excel VBAで同様の安価な方法はありますか?
行または列を取得するためのVBA関数はありません。自分で書くか、ここを見てください:
http ://www.cpearson.com/excel/vbaarrays.htm
これは、多次元配列の 1 つの次元を簡単に出力するために行うことです。
基本的に、新しい 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はそれほど悪くはなく、行列ベースでもあります。
したがって、ループしたくないと仮定します。関数を使用して、単にmulti-D array
ワークシートに出力することができTranspose
ます。
Row
次に、を使用して、を希望の範囲サイズの配列にプルしますTranspose
。
Dim vArr as Variant
'--output multi-D array into worksheet
Sheets(2).Range("E2").Resize(UBound(multiDArray) + 1, _
UBound(Application.Transpose(multiDArray))) = multiDArray
'--pull back the row you need: we double transpose here to get 1D. Coz single transpose
'-- results in 2D array..
vArr = WorksheetFunctions.Transpose( _
WorksheetFunctions.Transpose(Sheets(1).Range("A2:G2").Value))
完全に動的にするために、マルチDを使用して動的な行数を使用することができresize
ます:)range A2:G2
array row upperbound