DictionaryでKey検索
Excel VBAで大量データを扱うとき、Dictionary(辞書オブジェクト)を使うと「キーで検索」する処理が高速にできます。初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- Dictionaryとは?
キー(Key)と値(Item)をペアで保存する入れ物。 - 検索方法:
dict.Exists("キー")→ キーがあるかどうか確認。dict("キー")→ キーに対応する値を取得。
- 用途:
- コードから商品名を検索。
- IDから顧客情報を検索。
- 大量データでも一瞬で検索可能。
テンプレ1:キーで検索して値を取得
Sub Dict_SearchByKey()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
' データ登録
dict("A001") = "りんご"
dict("A002") = "みかん"
dict("A003") = "バナナ"
' 検索
Dim key As String: key = "A002"
If dict.Exists(key) Then
MsgBox "キー " & key & " の値は " & dict(key)
Else
MsgBox "キー " & key & " は存在しません"
End If
End Sub
VB- ポイント:
Existsで確認してから値を取り出す。- 存在しないキーを直接参照するとエラーになるので注意。
テンプレ2:複数キーを検索して結果を一覧表示
Sub Dict_SearchMultiple()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict("C001") = "東京"
dict("C002") = "大阪"
dict("C003") = "名古屋"
Dim keys As Variant
keys = Array("C001", "C004", "C002")
Dim k As Variant
For Each k In keys
If dict.Exists(k) Then
Debug.Print k & " → " & dict(k)
Else
Debug.Print k & " は存在しません"
End If
Next k
End Sub
VB- 結果:
C001 → 東京 C004 は存在しません C002 → 大阪
テンプレ3:安全な検索関数を作る
Function SafeSearch(dict As Object, key As String) As String
If dict.Exists(key) Then
SafeSearch = dict(key)
Else
SafeSearch = "該当なし"
End If
End Function
Sub Dict_SearchFunction()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict("X001") = "商品A"
dict("X002") = "商品B"
MsgBox SafeSearch(dict, "X001") ' → 商品A
MsgBox SafeSearch(dict, "X999") ' → 該当なし
End Sub
VB- ポイント: 関数化しておくと、検索処理を安全に再利用できる。
テンプレ4:シートのデータをDictionaryに登録して検索
Sub Dict_SearchFromSheet()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim rg As Range: Set rg = ws.Range("A2:B" & lastRow)
Dim v As Variant: v = rg.Value
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim r As Long
For r = 1 To UBound(v, 1)
dict(v(r, 1)) = v(r, 2) ' A列=コード, B列=商品名
Next r
' 検索例
Dim key As String: key = "P100"
If dict.Exists(key) Then
MsgBox "コード " & key & " の商品名は " & dict(key)
Else
MsgBox "該当なし"
End If
End Sub
VB- ポイント: シートのデータをDictionaryに読み込めば、検索が一瞬でできる。
例題で練習
'例1:キーで検索
Sub Example1()
Dict_SearchByKey
End Sub
'例2:複数キーを検索
Sub Example2()
Dict_SearchMultiple
End Sub
'例3:安全な検索関数を使う
Sub Example3()
Dict_SearchFunction
End Sub
'例4:シートのデータをDictionaryに登録して検索
Sub Example4()
Dict_SearchFromSheet
End Sub
VB初心者向けポイント
- Existsで安全に検索: 存在確認を必ず行う。
- 検索は一瞬: 数万件でも即検索可能。
- 関数化すると便利: 再利用しやすく、コードがすっきり。
- シートデータも高速検索: RangeをDictionaryに読み込めば、VLOOKUPより速い。
👉 この「Keyで検索テンプレ」を覚えておけば、実務での コード→名称変換、顧客検索、商品検索 を高速に安全に処理できます。
