VBA(Visual Basic for Applications)は、ExcelなどのMicrosoft Office製品を自動化するために非常に便利なプログラミング言語です。その中でも「Dictionary(ディクショナリ)」は、データをキーと値のセットで扱える便利なオブジェクトです。
この記事では、VBA初心者の方でも理解しやすいように、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 と表示される
これにより、配列では難しかった「名前で管理」「重複チェック」などが簡単になります。
VBAでDictionaryを使うためには、2つの方法があります。
こちらはVBA標準の方法で、特に参照設定は不要です。
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Microsoft Scripting Runtimeを参照設定することで、型を明示的に指定できます。
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary
この方法の利点は、IntelliSense(入力補完)が使えることです。
dict.Add "orange", 120
MsgBox dict("orange") ' → 120
If dict.Exists("apple") Then
MsgBox "存在します"
End If
dict.Remove "banana"
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を使えば、データの重複チェックが簡単にできます。
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が便利です。
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
Add
で同じキーを追加するとエラーになります。Exists
で存在確認をしてから追加しましょう。項目 | Dictionary | Collection |
---|---|---|
キー | 任意の文字列や数値 | 数値または文字列(やや制限あり) |
キーの存在確認 | Exists で可 | 不可 |
値の削除 | Remove で可 | 制限あり |
重複キー | 不可 | 可 |
速度 | 高速(特に大規模データ) | 比較的遅い場合も |
辞書は、キーで管理しやすく、データが多いときに特に有利です。
VBAのDictionaryオブジェクトを使いこなせるようになると、データ処理の効率が大きく向上します。
特に重複チェックや集計、検索処理などに強く、配列やCollectionでは手間がかかる処理も簡潔に書けます。
初心者の方も、まずは「Add」「Exists」「Remove」「For Each」あたりをしっかりマスターするところから始めてみましょう。慣れてきたら応用的な使い方にもチャレンジしてみてください。