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

VBAで2次元配列を1次元配列に変換するには、WorksheetFunction.indexの配列フォームを使用します。

Excelデータを配列に取り込むと2次元配列でしか取得できず、各行のデータをキーをもとにディクショナリへ格納するには2次元は不要なため1次元配列にしたいところです。しかしぐぐってもいいかげんな情報しかないため、以下にメモします。

まずExcelシートのデータを2次元配列に格納したあとで、1次元配列に変換してディクショナリに格納します(データの先頭がキーの場合)。

sheetName = "シート名"
With ThisWorkbook.Sheets(sheetName)
   Dim row As long
       row = .Cells(Rows.Count, 1).End(xlUp).row '最終行
      
       Dim dic As Dictionary
       Set dic = New Dictionary
       
       Dim index As Long
       For index = 2 To row
       
            Dim col As long
                col = .Cells(index, Columns.Count).End(xlToLeft).Column
                '各行の最終列
           Dim tempData As Variant
               tempData = .Range(.Cells(index, 1), .Cells(index, col))
           Dim datas As Variant
               datas = WorksheetFunction.index(tempData, 1, 0)
           dic.Add datas(1), datas
       Next
   
   End With

記事によってはカラムの指定がないので、1次元配列が生成できないものになっていました。該当行を配列として取得するにはどうやらカラムに0を指定するようです。

ちなみにデータを行ごとに取得していますが、これは行ごとにデータ長がちがうためで、すべて同じデータ長であれば一度に取り込んだほうがよさそうです。

ただ、この場合も1次元配列の開始位置は1なので使いずらいといえば使いずらいですね・・・

この記事が気に入ったらサポートをしてみませんか?