二次元配列から、列を指定して、その列の一次元配列を返すVBA関数
表題の関数の紹介です。
'*******
'* 二次元配列から、列を指定して、その列の一次元配列を返す関数。20240109
'* column:配列の指定する列
'* arr:二次元配列は、参照渡し。
Private Function ReadColumnsToArray(ByVal column As Long, ByRef arr As Variant) As Variant()
Dim columnData() As Variant
Dim i As Long
ReDim columnData(1 To UBound(arr, 1))
For i = 1 To UBound(arr, 1)
columnData(i) = arr(i, column)
Next i
' 列のデータを配列に格納
ReadColumnsToArray = columnData
End Function関数の概要
この関数は、二次元配列から指定した列のデータだけを取り出し、一次元配列として返します。
Excel VBAでは、シートのデータを配列に読み込んで高速処理することがよくあります。
例えば以下のようなデータが二次元配列に格納されているとします。
| A列 | B列 | C列 |
|---|---|---|
| 東京 | 100 | 営業 |
| 大阪 | 200 | 開発 |
| 名古屋 | 300 | 総務 |
このとき、
result = ReadColumnsToArray(2, arr)
を実行すると、B列のデータだけが取り出されます。
100
200
300
処理の流れ
関数は以下の手順で処理を行います。
- 指定された列番号を受け取る
- 元の二次元配列を先頭行から順番に確認
- 指定列の値を一次元配列へ格納
- 空白セルが現れたら処理終了
- 一次元配列を戻り値として返す
コードの説明
配列の宣言
Dim columnData() As Variant
指定列のデータを格納するための一次元配列です。
配列サイズを拡張
ReDim columnData(1 To UBound(arr, 1))取得したデータ数に応じて配列サイズを拡張しています。
行ループ
For i = 1 To UBound(arr, 1)
二次元配列の先頭行から最終行まで処理します。
値を格納
columnData(i) = arr(i, column)
指定列の値を一次元配列へ格納します。
使用例
シートのデータを配列へ読み込み、B列だけを取得する例です。
Sub Sample()
Dim arr As Variant
Dim result() As Variant
Dim i As Long
arr = Range("A1:C10").Value
result = ReadColumnsToArray(2, arr)
For i = LBound(result) To UBound(result)
Debug.Print result(i)
Next i
End Sub
実行結果
100
200
300
400
500
のように、指定した列だけがイミディエイトウィンドウへ出力されます。
応用例
この関数は次のような用途で活用できます。
- 商品コード列だけ取得する
- 顧客名列だけ取得する
- メールアドレス一覧を作成する
- 重複チェック用の配列を作成する
- VLOOKUPの代わりにDictionaryへ格納する
特に大量データを配列で処理する場合、必要な列だけを取り出して処理することでコードが分かりやすくなり、保守性も向上します。


