配列(一次元/二次元)

二次元配列の一部をワークシートに貼付する【ExcelVBA】

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行を 一次元配列に変換する」

 

 

コメント

  1. ‘■二次元配列の指定列(A列(1列目))を一次元配列に格納する
    Array1D = WorksheetFunction.Index(WorksheetFunction.Transpose(Array2D), 1)
    の所は、
    Array1D = WorksheetFunction.Transpose(WorksheetFunction.Index(WorksheetFunction.Transpose(Array2D), 1))
    ではないでしょうか。

    • 上記は一次元配列ではなく、二次元配列に格納される場合は、ご指摘のコードになるかと思われます。

タイトルとURLをコピーしました