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