Excel VBA | 配列を Dictionary に変換して高速検索する例

VBA
スポンサーリンク

Excel VBA では、配列をそのままループして検索すると 線形探索(1件ずつチェック) になるため遅くなります。
そこで Scripting.Dictionary を使うと、キーで即座に検索できるので高速化できます。


基本の流れ

  1. 配列を用意する
  2. Dictionary に変換する(キー=検索対象、値=付随情報やインデックスなど)
  3. キーで検索する(存在確認や値取得が一瞬でできる)

実装例:顧客コードを高速検索

Sub ArrayToDictionarySearch()
    Dim arr As Variant
    Dim dict As Object
    Dim i As Long
    Dim searchKey As String
    
    ' 1. 配列を用意(顧客コード一覧)
    arr = Array("C001", "C002", "C003", "C004", "C005")
    
    ' 2. Dictionary を作成
    Set dict = CreateObject("Scripting.Dictionary")
    
    For i = LBound(arr) To UBound(arr)
        dict(arr(i)) = i   'キー=顧客コード, 値=インデックス番号
    Next i
    
    ' 3. 検索例
    searchKey = "C003"
    If dict.Exists(searchKey) Then
        Debug.Print searchKey & " は配列の " & dict(searchKey) & " 番目にあります"
    Else
        Debug.Print searchKey & " は存在しません"
    End If
End Sub
VB

応用例:顧客名を紐付けて検索

Sub CustomerDictionary()
    Dim codes As Variant, names As Variant
    Dim dict As Object
    Dim i As Long
    
    ' 顧客コードと顧客名の配列
    codes = Array("C001", "C002", "C003")
    names = Array("田中商事", "佐藤工業", "鈴木電機")
    
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' コードをキーにして名前を値に登録
    For i = LBound(codes) To UBound(codes)
        dict(codes(i)) = names(i)
    Next i
    
    ' 検索
    If dict.Exists("C002") Then
        Debug.Print "C002 の顧客名は " & dict("C002")
    End If
End Sub
VB

✅ まとめ

  • 配列検索 → 遅い(1件ずつチェック)
  • Dictionary検索 → 速い(キーで即アクセス)
  • 実務では「顧客コード」「商品コード」「社員番号」など 一意のキーで検索する場面 に最適。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました