[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なので使いずらいといえば使いずらいですね・・・