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