VBA

【VBA】テーブルのデータを配列に格納する関数

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

エクセルのテーブルデータを配列に格納する関数です。
なぜそんなことをする必要があるのかは後でご説明いたします。
これやると実は結構便利なんです。

関数

  • 関数名
    table_Input( table )
  • 引数
    table : テーブル(データ型はListObject)
  • 戻り値
    配列
    [カラム名の配列 , レコード(中身)の配列]

戻り値が少しややこしいですが
イメージとしては以下のようになります。

名前数学英語家庭科
小西9076A
山田9193C

このような表の場合
[
 [ “名前” , “数学” , “英語” , “家庭科”], ←列名の配列
 [[“小西” , 90 , 76 , “A” ] , [“山田” , 91 , 93 , “C”]] ←レコードの配列
]

Function table_Input(ByVal table As ListObject)
    Dim r As Range
    Dim columns As Variant
    Dim i, j As Long
    Dim data, datas As Variant
    
    For Each r In table.HeaderRowRange
        Call add_Elm(columns, r.Value)
    Next
    
    For i = 1 To table.ListRows.Count
        data = Array()
        For j = 1 To table.ListRows(i).Range.Count
            Call add_Elm(data, table.ListRows(i).Range(j).Value)
        Next
        Call add_Elm(datas, data)
    Next
    
    table_Input = Array(columns, datas)
End Function

使い方

実際に使ってみます。

↑のテーブルの内容を配列に格納します。

Sub test_input()
Dim table As ListObject
Dim table_datas As Variant
Dim columns, datas As Variant

Set table = ThisWorkbook.Worksheets("Table2").ListObjects(1)

table_datas = table_Input(table)
columns = table_datas(0)
datas = table_datas(1)

End Sub

データが格納できました。

これ何に使うの?

これは何に使うのでしょうか?
私もこれを最初に作ったわけではありません。

配列の列並び替え関数を考えたときに
一度配列に入れ込んだ方が圧倒的に楽に作れると気づいたので作りました。

配列ってやっぱりプログラムの基本なんです。
とりあえず配列に入れることが出来さえすれば、
楽にコーディングできるようになります。