ExcelVBA

2次元配列の特定の列or行を 1次元配列に変換する【ExcelVBA】

2次元配列を 1次元配列に変換する

2次元配列を使用していると、そのまま処理する場合だけでなく、
特定の指定行のみまたは指定列のみに対して処理をしたいケースがあります。
その場合、新たに一次元配列として抽出した方がシンプルです。

2次元配列を 1次元配列に変換サンプルコード

単純に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関数で指定された行の位置にある配列の値を求めています。

指定列の場合

WorksheetFunction.Index(Array2D, , 1) では引数は省略できませんのエラーが発生する為、
WorksheetFunction.Transposeで行列を入れ替えてから、Index関数で処理をします。
特定の行を抽出するよりも、一つ複雑な処理ですね。

注意点

Rangeの表現をしていますが、本来は記載するブック名を記入しましょう。詳細は下記記事参照してください。
マクロ初級者必読-ワークシート名を変数にSetし、短い名前で利用する

関連記事

ExcelVBAマクロ「配列にセル範囲を格納/動的配列をセルに貼付する」(1次元配列、二次元配列をもっと簡単に使う方法)
ExcelVBAマクロ「二次元配列で任意の列をキーにソート」をパーツ化する

 

 

コメント

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