管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

ExcelVBAで連想配列を使って、キーをソートして出力したい

ExcelVBAで、連想配列を使って、キーをソートして出力したかったのでメモです。
Dictionaryだけではキーのソートを行うことはできず、ひと手間必要でした。

実行環境

バージョン 2008 (ビルド 13127.20408 クイック実行)

対象データ

キー
2
1
3

これを、あ→い→うと表示したいです。

ソースコード

ファイルパスは、「ボタン1」を設置したシートの「C6」セルに入力させることを想定しています。

Option Explicit

Sub Macro1()
    Dim dict As Object
    Dim tmpRange As Range
    Dim i As Integer
    Dim tmpVal
    Dim key
    Dim val
    Dim arrayList
    Dim sortedKeys
    
    Set tmpRange = ActiveSheet.Range("A1:B3")
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' Dictionaryにセルの内容を格納
    ' A1B1A2B2...の順で走査
    For i = 1 To tmpRange.Count
        tmpVal = tmpRange.Item(i).Value
    
        If i Mod 2 = 1 Then
            key = tmpVal
        Else
            val = tmpVal

            ' 行の終わり(B列)でDictionaryに格納
            dict.Add key, val
        End If
    Next
    
    ' キーをソートするのにArrayListを利用
    Set arrayList = CreateObject("System.Collections.ArrayList")
    For Each key In dict.keys
        arrayList.Add key
    Next
    arrayList.Sort
    
    sortedKeys = arrayList.ToArray
    
    For Each key In sortedKeys
        Debug.Print dict.Item(key)
    Next
    
    Set arrayList = Nothing
    Set dict = Nothing
    Set tmpRange = Nothing
    
End Sub