VBAでDictionaryを使いこなす!基本から応用まで徹底解説

VBA(Visual Basic for Applications)は、ExcelなどのMicrosoft Office製品を自動化するために非常に便利なプログラミング言語です。その中でも「Dictionary(ディクショナリ)」は、データをキーと値のセットで扱える便利なオブジェクトです。
この記事では、VBA初心者の方でも理解しやすいように、Dictionaryの基本的な使い方から応用的な活用法まで、丁寧に解説していきます。効率よくデータを扱いたい方は、ぜひ最後まで読んでみてください。


Dictionaryとは何か?

Dictionaryとは、キー(Key)と値(Item)のペアを格納できるオブジェクトです。
Excelのセルのように、A1、B2といった「住所」で管理するのではなく、任意のキー(たとえば「名前」「ID」など)を使って値を取得できます。

たとえば以下のような使い方ができます:

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

dict.Add "apple", 100
dict.Add "banana", 80

MsgBox dict("apple") ' → 100 と表示される

これにより、配列では難しかった「名前で管理」「重複チェック」などが簡単になります。


Dictionaryを使うための準備

VBAでDictionaryを使うためには、2つの方法があります。

方法1:CreateObjectを使う

こちらはVBA標準の方法で、特に参照設定は不要です。

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

方法2:参照設定を行う

Microsoft Scripting Runtimeを参照設定することで、型を明示的に指定できます。

  1. VBAエディタで「ツール」→「参照設定」をクリック。
  2. 「Microsoft Scripting Runtime」にチェックを入れる。
  3. 以下のように書く:
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary

この方法の利点は、IntelliSense(入力補完)が使えることです。


基本操作(Add、Item、Exists、Remove)

Add:値の追加

dict.Add "orange", 120

Item:値の取得

MsgBox dict("orange")  ' → 120

Exists:キーの存在確認

If dict.Exists("apple") Then
MsgBox "存在します"
End If

Remove:値の削除

dict.Remove "banana"

全て削除(RemoveAll)

dict.RemoveAll

ループ処理で全データを取得する方法

DictionaryはFor Eachを使ってループすることで、すべてのキーと値を取り出すことができます。

Dim key As Variant

For Each key In dict.Keys
Debug.Print key & ":" & dict(key)
Next

dict.Keysで全キー、dict.Itemsで全値を取得できます。


Dictionaryの活用例①:重複データのチェック

Dictionaryを使えば、データの重複チェックが簡単にできます。

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

Dim i As Long
For i = 1 To 100
If Not dict.Exists(Cells(i, 1).Value) Then
dict.Add Cells(i, 1).Value, True
Else
MsgBox "重複しています: " & Cells(i, 1).Value
End If
Next i

Dictionaryの活用例②:データの集計

同じ名前ごとの合計点数などを集計したい場合も、Dictionaryが便利です。

Dim name As String
Dim score As Long

For i = 2 To 100
name = Cells(i, 1).Value
score = Cells(i, 2).Value

If dict.Exists(name) Then
dict(name) = dict(name) + score
Else
dict.Add name, score
End If
Next i

' 結果表示
For Each key In dict.Keys
Debug.Print key & "の合計点:" & dict(key)
Next

Dictionaryを使う上での注意点

  • キーの重複は許可されません。Addで同じキーを追加するとエラーになります。
  • 事前にExistsで存在確認をしてから追加しましょう。
  • 辞書のキーは大文字小文字を区別しません(オプションで変更可)。

DictionaryとCollectionの違い

項目DictionaryCollection
キー任意の文字列や数値数値または文字列(やや制限あり)
キーの存在確認Existsで可不可
値の削除Removeで可制限あり
重複キー不可
速度高速(特に大規模データ)比較的遅い場合も

辞書は、キーで管理しやすく、データが多いときに特に有利です。


まとめ

VBAのDictionaryオブジェクトを使いこなせるようになると、データ処理の効率が大きく向上します。
特に重複チェックや集計、検索処理などに強く、配列やCollectionでは手間がかかる処理も簡潔に書けます。

初心者の方も、まずは「Add」「Exists」「Remove」「For Each」あたりをしっかりマスターするところから始めてみましょう。慣れてきたら応用的な使い方にもチャレンジしてみてください。

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