2次元配列の一部をワークシートに貼付する
2次元配列を使用していると、特定の指定行のみまたは指定列のみ
セルに結果としてペーストしたいケースがあります。
2次元配列の一部をワークシートに貼付するサンプルコード
単純にUbound関数、LBound関数で要素数を判断しLoopさせて値を貼付するのもいいのですが、
無駄にコードが長くなる(もしくは無駄なプロシージャが出来上がる)ので、エクセルの機能を存分に使用します。
'■二次元配列から特定行or特定列をワークシートに貼り付けするサンプルコード Public Sub test_Array2D_to_Array1D_Conv() Dim Array1D As Variant '一次元配列 Dim Array2D As Variant '二次元配列 Array2D = Range("A1:E5") '■二次元配列の指定行(2行目)を一次元配列に格納する Array1D = WorksheetFunction.Index(Array2D, 2) '■二次元配列の指定列(A列(1列目))を一次元配列に格納する Array1D = WorksheetFunction.Index(WorksheetFunction.Transpose(Array2D), 1) End Sub
指定行の場合
WorksheetFunction(ワークシート関数)のIndex関数で処理をします。
Index関数で指定された行の位置にある配列の値を求めています。
Resizeはセル貼付の記事参照。
指定列の場合
WorksheetFunction.Transposeで行列を入れ替えてから、Index関数で処理をして、
さらにWorksheetFunction.Transposeをする為、特定の行を抽出するよりも、複雑な処理ですね。
注意点
Rangeの表現をしていますが、本来は記載するブック名を記入しましょう。詳細は下記記事参照してください。
マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する
関連記事
ExcelVBAマクロ「配列にセル範囲を格納/動的配列をセルに貼付する」(1次元配列、二次元配列をもっと簡単に使う方法)
ExcelVBAマクロ「二次元配列で任意の列をキーにソート」をパーツ化する
ExcelVBAマクロ「二次元配列の特定の列or行を 一次元配列に変換する」
コメント
‘■二次元配列の指定列(A列(1列目))を一次元配列に格納する
Array1D = WorksheetFunction.Index(WorksheetFunction.Transpose(Array2D), 1)
の所は、
Array1D = WorksheetFunction.Transpose(WorksheetFunction.Index(WorksheetFunction.Transpose(Array2D), 1))
ではないでしょうか。
上記は一次元配列ではなく、二次元配列に格納される場合は、ご指摘のコードになるかと思われます。