二次元配列から、列を指定して、その列の一次元配列を返す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

処理の流れ

関数は以下の手順で処理を行います。

  1. 指定された列番号を受け取る
  2. 元の二次元配列を先頭行から順番に確認
  3. 指定列の値を一次元配列へ格納
  4. 空白セルが現れたら処理終了
  5. 一次元配列を戻り値として返す

コードの説明

配列の宣言

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へ格納する

特に大量データを配列で処理する場合、必要な列だけを取り出して処理することでコードが分かりやすくなり、保守性も向上します。

Follow me!

コメントを残す