Excel VBA 逆引き集 | Dictionary 基本

Excel VBA
スポンサーリンク

Dictionary 基本

Excel VBAで「キーと値をセットで管理したい」「高速に検索したい」ときに便利なのが Dictionary(辞書オブジェクト) です。初心者でも理解しやすいように、コード例とテンプレートをかみ砕いて説明します。


基本の考え方

  • Dictionaryとは?
    キー(Key)と値(Item)をペアで保存する入れ物。
    • キーはユニーク(重複不可)。
    • 値は自由に設定できる(文字列・数値・配列など)。
  • メリット:
    • 高速検索(Existsで一瞬判定)。
    • 重複除去(ユニーク化)。
    • 集計やマッピングに便利。

テンプレ1:Dictionaryの基本操作

Sub Dict_Basic()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    ' 値を追加
    dict.Add "A001", "りんご"
    dict.Add "A002", "みかん"
    dict.Add "A003", "バナナ"

    ' 値を取得
    MsgBox dict("A002") ' → "みかん"

    ' キーが存在するか確認
    If dict.Exists("A003") Then
        MsgBox "A003は存在します"
    End If

    ' キー一覧をループ
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print k, dict(k)
    Next k
End Sub
VB
  • ポイント:
    • Add で追加。
    • dict("キー") で値を取得。
    • Exists で存在確認。
    • Keys でキー一覧を取得。

テンプレ2:重複除去(ユニーク化)

Sub Dict_Unique()
    Dim fruits As Variant
    fruits = Array("りんご", "みかん", "バナナ", "りんご", "ぶどう")

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim f As Variant
    For Each f In fruits
        dict(f) = True ' キーだけ使う
    Next f

    ' ユニーク一覧を出力
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print k
    Next k
End Sub
VB
  • 結果: りんご みかん バナナ ぶどう

テンプレ3:集計(商品ごとの数量合計)

Sub Dict_Sum()
    Dim data As Variant
    data = Array( _
        Array("りんご", 10), _
        Array("みかん", 5), _
        Array("りんご", 8), _
        Array("バナナ", 12))

    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    Dim i As Long, key As String
    For i = LBound(data) To UBound(data)
        key = data(i)(0)
        If dict.Exists(key) Then
            dict(key) = dict(key) + data(i)(1)
        Else
            dict(key) = data(i)(1)
        End If
    Next i

    ' 結果出力
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print k, dict(k)
    Next k
End Sub
VB
  • 結果: りんご 18 みかん 5 バナナ 12

テンプレ4:コード検索(マッピング)

Sub Dict_Search()
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    dict("C001") = "東京"
    dict("C002") = "大阪"
    dict("C003") = "名古屋"

    Dim code As String: code = "C002"
    If dict.Exists(code) Then
        MsgBox "コード " & code & " の都市は " & dict(code)
    Else
        MsgBox "該当なし"
    End If
End Sub
VB
  • ポイント: コードをキーにして都市名を高速検索。

例題で練習

'例1:基本操作
Sub Example1()
    Dict_Basic
End Sub

'例2:重複除去
Sub Example2()
    Dict_Unique
End Sub

'例3:商品ごとの数量合計
Sub Example3()
    Dict_Sum
End Sub

'例4:コード検索
Sub Example4()
    Dict_Search
End Sub
VB

初心者向けポイント

  • Dictionaryは「キーと値のペア」 → ExcelのVLOOKUPのような使い方ができる。
  • Existsで高速検索 → 数万件でも一瞬。
  • ユニーク化や集計に最適 → 重複除去や合計計算が簡単。
  • Keys/Itemsで一覧取得 → ループで処理できる。
  • 実務で便利 → コード→名称変換、商品ごとの集計、重複チェックなど。

👉 この「Dictionary基本テンプレ」をベースにすれば、初心者でも 検索・集計・ユニーク化 を高速に実務へ応用できます。

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