Excel/VBA くそいまいましい1始まりの2次元配列を一次元(0始まり)に変換すべし
Excelのデータを変数(配列)に取り込んだ場合、そのままでは1始まりの2次元配列に取り込まれます。
しかし、各行のデータを配列としてディクショナリに格納するケースでは、2次元配列となるのは、不要な次元が加わることになり、じゃまでしょうがありません。
また、普通の配列は0から定義され、Splitなどで分割する配列も0から始まります。0から始まる配列と1から始まる配列が混在すると、勘違いからバグの温床になります。
使いやすいようにExcel表の行を1次元(0始まり)の配列としてディクショナリに格納するには、以下のような記述でできるようです。
sheetName = "シート名"
With ThisWorkbook.Sheets(sheetName)
'最終行を取得
rowCol.row = .Cells(Rows.Count, 1).End(xlUp).row
'データ格納ディクショナリを生成
Set dic = New Dictionary
'データを格納
Dim index As Long
For index = 2 To rowCol.row
'データの最終列を取得
rowCol.col = .Cells(index, Columns.Count).End(xlToLeft).Column
'データを取得(2次元配列)
Dim tempData As Variant
tempData = .Range(.Cells(index, 1), .Cells(index, rowCol.col))
'データを1次元配列に変換(0はじまり)
Dim datas As Variant
datas = WorksheetFunction.index(tempData, 1, 0)
ReDim Preserve datas(0 To UBound(datas) - 1)
'配列の頭をキーとして、データを1次元配列として格納
dic.Add datas(0), datas
Next
End With
これで先頭の文字列をキーとする簡単なデータベースが構成できます。
今回は配列で格納していますが、列をキーとするディクショナリを格納すれば、行と列で検索するデータベースも構成できるかと思います。
今日はこんな感じで。ではでは。