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マクロ「二次元配列で任意の列をキーにソート」をパーツ化する
コメント