【VBA】連想配列 Scripting.Dictionary の使い方を徹底解説!

目次

はじめに

VBAの配列は、myArray(0) のように数値のインデックスでデータを管理します。しかし、「商品名」をキーにして「価格」を取り出す、といったように、文字列をキー(添え字)にしてデータを扱いたい場面は非常に多くあります。

このような「キーと値のペア」でデータを管理する仕組みを「連想配列」と呼びます。VBAで連想配列を実現するには、Scripting.Dictionary オブジェクトを利用するのが最も強力で一般的です。

この記事では、Dictionaryオブジェクトの基本的な使い方から、実用的な応用例までを網羅的に解説します。

【事前準備】 Dictionary を使うには、「参照設定」が必要です。VBEのメニューから「ツール」→「参照設定」を開き、「Microsoft Scripting Runtime」にチェックを入れてください。これにより、Dim dict As Dictionary のように Dictionary 型を直接使えるようになり、入力補完も効くため便利です。


Dictionaryオブジェクトの基本的な使い方

1. Dictionaryの作成

' Dictionaryオブジェクトを宣言し、新しいインスタンスを作成する
Dim productPrices As Scripting.Dictionary
Set productPrices = New Scripting.Dictionary

2. 項目の追加 (.Add)

.Add メソッドを使って、「キー」と、それに対応する「値(Item)」をペアで追加します。キーは重複できません

' .Add キー, アイテム
productPrices.Add "商品A", 1200
productPrices.Add "商品B", 850
productPrices.Add "商品C", 2100

3. 項目の値を取得

キーを指定して、対応する値を取得します。

' "商品B" の価格を取得
Dim price As Long
price = productPrices("商品B") ' または productPrices.Item("商品B")
MsgBox "商品Bの価格: " & price & "円" ' -> 850円

4. キーの存在確認 (.Exists)

指定したキーが既に存在するかどうかを True/False で確認します。.Add の前に重複をチェックする際に必須です。

If productPrices.Exists("商品D") Then
    MsgBox "商品Dは既に登録されています。"
Else
    productPrices.Add "商品D", 980
    MsgBox "商品Dを追加しました。"
End If

5. 項目数の取得 (.Count)

.Count プロパティで、Dictionary に格納されている項目数を取得できます。

MsgBox "登録されている商品数: " & productPrices.Count

キーと値の一覧を取得する

6. 全てのキーを取得 (.Keys)

.Keys メソッドは、Dictionary 内の全てのキーを格納した配列を返します。

Dim allKeys As Variant
allKeys = productPrices.Keys ' -> ("商品A", "商品B", "商品C", "商品D")

' Join関数と組み合わせて一覧表示
MsgBox "取扱商品一覧: " & Join(allKeys, ", ")

7. 全ての値(Item)を取得 (.Items)

.Items メソッドは、全ての値を格納した配列を返します。

Dim allPrices As Variant
allPrices = productPrices.Items ' -> (1200, 850, 2100, 980)

項目の削除

8. 特定の項目を削除 (.Remove)

キーを指定して、項目を削除します。

productPrices.Remove "商品C"
MsgBox "商品Cを削除しました。"

9. 全ての項目を削除 (.RemoveAll)

Dictionary の中身を全て空にします。

productPrices.RemoveAll
MsgBox "全ての商品を削除しました。"

実用例:重複を除いたリストの作成

Dictionary の「キーが重複できない」という特性は、重複を除いたユニークなリストを作成する際に絶大な威力を発揮します。

' D列の値から、重複を除いたリストを作成する
Sub CreateUniqueList()
    Dim uniqueList As Scripting.Dictionary
    Set uniqueList = New Scripting.Dictionary
    
    Dim cell As Range
    
    ' D2セルからD列の最終行までループ
    For Each cell In ActiveSheet.Range("D2", ActiveSheet.Cells(Rows.Count, "D").End(xlUp))
        ' まだキーとして登録されていなければ、追加する
        If Not uniqueList.Exists(cell.Value) Then
            uniqueList.Add cell.Value, "" ' 値は使わないので空でOK
        End If
    Next cell
    
    MsgBox "重複を除いたリスト:" & vbCrLf & Join(uniqueList.Keys, vbCrLf)
End Sub

まとめ

今回は、VBAで連想配列を実現する Scripting.Dictionary オブジェクトの網羅的な使い方を解説しました。キーと値のペアでデータを管理できるため、単純な配列よりも直感的で高速なデータアクセスが可能になる場面が多くあります。特に、重複チェックのロジックをシンプルに記述できる点は、実務において非常に強力です。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次