Excel VBA | キーと値を同時にソートして、結果を配列や新しいDictionaryに格納する方法

Excel VBA VBA
スポンサーリンク

キーと値を同時にソートして、結果を配列や新しいDictionaryに格納する方法

Scripting.Dictionary は順序を保持しないため、キーと値をペアとしてまとめてソート → 新しい配列やDictionaryに格納する必要があります。これで「キーと値を同時にソートした結果」を扱えるようになります。


1. キーと値をペアにして配列へ格納

まず、キーと値をペアとして配列にまとめます。

Function DictToArray(dict As Object) As Variant
    Dim arr() As Variant
    Dim i As Long, k As Variant
    
    ReDim arr(1 To dict.Count, 1 To 2)
    i = 1
    For Each k In dict.Keys
        arr(i, 1) = k
        arr(i, 2) = dict(k)
        i = i + 1
    Next k
    DictToArray = arr
End Function
VB

2. 配列をソート(キーまたは値で)

Sub SortArrayByColumn(arr As Variant, colIndex As Long)
    Dim i As Long, j As Long
    Dim tmpKey As Variant, tmpVal As Variant
    
    For i = LBound(arr, 1) To UBound(arr, 1) - 1
        For j = i + 1 To UBound(arr, 1)
            If arr(i, colIndex) > arr(j, colIndex) Then
                tmpKey = arr(i, 1): tmpVal = arr(i, 2)
                arr(i, 1) = arr(j, 1): arr(i, 2) = arr(j, 2)
                arr(j, 1) = tmpKey: arr(j, 2) = tmpVal
            End If
        Next j
    Next i
End Sub
VB
  • colIndex = 1 → キーでソート
  • colIndex = 2 → 値でソート

3. 新しいDictionaryに格納

Function ArrayToDict(arr As Variant) As Object
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    Dim i As Long
    For i = LBound(arr, 1) To UBound(arr, 1)
        dict(arr(i, 1)) = arr(i, 2)
    Next i
    Set ArrayToDict = dict
End Function
VB

4. 実行例

Sub TestDictSortBoth()
    Dim dict As Object, arr As Variant, sortedDict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.Add "C", "Cherry"
    dict.Add "A", "Apple"
    dict.Add "B", "Banana"
    
    ' キーと値を配列化
    arr = DictToArray(dict)
    
    ' 値でソート
    SortArrayByColumn arr, 2
    
    ' 新しいDictionaryに格納
    Set sortedDict = ArrayToDict(arr)
    
    ' 出力確認
    Dim k As Variant
    For Each k In sortedDict.Keys
        Debug.Print k & " => " & sortedDict(k)
    Next k
End Sub
VB

出力:

A => Apple
B => Banana
C => Cherry

まとめ

  • Dict → 配列化 → キーと値をペアにする
  • 配列をソート → キー順・値順を選べる
  • 新しいDictionaryに再格納 → ソート済みの結果を保持できる

👉 この方法を使えば「キーと値を同時にソートして結果を配列や新しいDictionaryに格納」できるので、データを整理して扱うのがぐっと楽になります。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました