Excel VBA 逆引き集 | Keyで検索

Excel VBA
スポンサーリンク

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で検索テンプレ」を覚えておけば、実務での コード→名称変換、顧客検索、商品検索 を高速に安全に処理できます。

タイトルとURLをコピーしました