Excel VBA では、配列をそのままループして検索すると 線形探索(1件ずつチェック) になるため遅くなります。
そこで Scripting.Dictionary を使うと、キーで即座に検索できるので高速化できます。
基本の流れ
- 配列を用意する
- Dictionary に変換する(キー=検索対象、値=付随情報やインデックスなど)
- キーで検索する(存在確認や値取得が一瞬でできる)
実装例:顧客コードを高速検索
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検索 → 速い(キーで即アクセス)
- 実務では「顧客コード」「商品コード」「社員番号」など 一意のキーで検索する場面 に最適。


