辞書のキーとアイテムで二次元配列作成

辞書(連想配列)のキーとアイテムで、二次元配列を作りたくなる場面に遭遇。

そういえば、テーブル内の指定した二列で辞書を作る関数を作成したことはあったが、その逆は無かったな。
infoment.hatenablog.com

というわけでな、今回はこれに挑戦してみた。
f:id:Infoment:20191021222017p:plain

といっても、あまり大げさなことはしていない。
毎度のごとく、愚直に値を格納するだけだ。

Public Function DictToArray(source_dict As Dictionary, _
                   Optional first_array_key As Boolean = True) As Variant
                   
    Dim arr() As Variant
    ReDim arr(1 To UBound(source_dict.Keys) + 1, 1 To 2)
    
    Dim i As Long
        For i = 1 To UBound(arr)
            ' Trueは「-1」、Falseは「0」であることを利用して、
            ' どちらが1列目になるかを決めている。
            arr(i, first_array_key + 2) = source_dict.Keys(i - 1)
            arr(i, 1 - first_array_key) = source_dict.Items(i - 1)
        Next
        
        DictToArray = arr
End Function

それでは、軽くテストしてみよう。

Sub test()

    Dim Dict As Object
    Set Dict = CreateObject("Scripting.Dictionary")
        Dict("りんご") = 100
        Dict("みかん") = 200
        Dict("ばなな") = 300
        
    Dim arr As Variant
        arr = DictToArray(Dict)
        Range("A1:B3") = arr
        
        ' 順序入れ替えバージョン。
        arr = DictToArray(Dict, False)
        Range("D1:E3") = arr

End Sub

↓ 結果は良好。今後、意外と重宝する予感がする。
f:id:Infoment:20191021223101p:plain

参考まで。