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

これで先頭の文字列をキーとする簡単なデータベースが構成できます。

今回は配列で格納していますが、列をキーとするディクショナリを格納すれば、行と列で検索するデータベースも構成できるかと思います。

今日はこんな感じで。ではでは。


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