VBA Dictionaryオブジェクト

VBAのDictionaryオブジェクトとは、いわゆる「連想配列」です。キーが重複しないリストを作成するのに便利です。

Dictionaryの使い方

VBAでDictionaryオブジェクトを使用するには、2通りの方法がある。

CreateObjectでDictionaryオブジェクトを作成する方法を次に示す。

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

NewでDictionaryオブジェクトを作成する方法を次に示す。

Dim dict As New Scripting.Dictionary

NewでDictionaryオブジェクトを作成するには、事前に参照設定を行う必要がある。

VBA Dictionaryの参照設定

NewでDictionaryオブジェクトを作成できるようにするには、事前に参照設定を行う必要がある。

  1. Microsoft Visual Basic for Applicationsの「ツール」メニューから「参照設定」をクリックする。
    参照設定
    Figure 1. 参照設定
  2. 「参照可能なライブラリファイル」の「Microsoft Scripting Runtime」にチェックを入れる。
    Microsoft Scripting Runtime
    Figure 2. Microsoft Scripting Runtime
  3. OKボタンをクリックして、「参照設定」ダイアログを閉じる。

Dictionaryのプロパティ

Dictionaryオブジェクトには次のようなプロパティがある。

Dictionaryオブジェクトのプロパティ
プロパティ 説明
Count 連想配列に格納された項目の数
Item( key ) キーに関連付けられた項目
Key( key ) キー
CompareMode vbBinaryCompare(0) 大文字と小文字を区別する
vbBinaryCompare(1) 大文字と小文字を区別しない

Count

Countは連想配列に格納された項目の数を表すプロパティである。

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

dict.Add "key1", "value1"
dict.Add "key2", "value2"

keyarray = dict.Keys

For i = 0 To dict.Count - 1
  Debug.Print keyarray(i)
Next

Item

Itemはキーに関連づいた値を示すプロパティである。

dictionary.Item( key )

キーに関連づいた値を変更することもできる。

dictionary.Item( key ) = newitem
dictionary
ディクショナリオブジェクト
key
キー
newitem
変更後の値

Key

Keyはキーを変更するためのプロパティである。

dictionary.Key( key ) = newitem
dictionary
ディクショナリオブジェクト
key
キー
newitem
変更後のキー

Dictionaryのメソッド

Dictionaryオブジェクトには次のようなメソッドがある。

Dictionaryオブジェクトのメソッド
メソッド 説明
Add 連想配列に値を追加する
Exists( key ) 連想配列に指定したキーが存在すればTrue、存在しなければFalseを返す。
Items 連想配列の項目を0から始まる配列にして返す。
Keys 連想配列のキーを0から始まる配列にして返す。
Remove( key ) キーと項目のペアを削除する。キーが存在しない場合はエラー。
RemoveAll すべてのキーと項目を削除して初期化する。

Add

連想配列に値を追加するには、Addメソッドを使用する。

dictionary.Add key, item

追加しようとするキーが既に連想配列に存在する場合はエラーとなる。

dictionary
ディクショナリオブジェクト
key
キー
item
キーに関連付ける項目

Dictionaryオブジェクトにキーと値を追加するサンプルを次に示す。

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

dict.Add "key1", "value1"
dict.Add "key2", "value2"

For Each key In dict
  Debug.Print key
  Debug.Print dict.Item(key)
Next

Exists

指定したキーが連想配列に存在するかどうかを判定するにはExistsメソッドを使う。指定したキーが連想配列に存在すればTrueを返し、存在しなければFalseを返す。

dictionary.Exists( key )
dictionary
ディクショナリオブジェクト
key
キー

指定したキーがDictionaryに存在するかどうかを判定する例を示す。

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

For i = 1 To 10
  buf = Worksheets("foo").Cells(i, 1)

  If Not dict.Exists(buf) Then
      dict.Add buf, buf
  End
Next

Keys

連想配列を通常の配列に変換するには、Keysメソッドを使う。

dictionary.Keys
dictionary
ディクショナリオブジェクト

連想配列を通常の配列に変換する例を示す。

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

dict.Add "key1", "value1"
dict.Add "key2", "value2"

keyarray = dict.Keys

For i = 0 To dict.Count - 1
  Debug.Print keyarray(i)
Next

Remove

連想配列から指定したキーの項目を削除するには、Removeメソッドを使う。

dictionary.Remove( key )
dictionary
ディクショナリオブジェクト
key
キー

連想配列から指定したキーの項目を削除するサンプルを示す。

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

dict.Add "key1", "value1"
dict.Add "key2", "value2"

dict.Remove("key1")

For Each key In dict
  Debug.Print key
  Debug.Print dict.Item(key)
Next

RemoveAll

連想配列からすべての項目を削除して初期化するには、RemoveAllメソッドを使う。

dictionary.RemoveAll
dictionary
ディクショナリオブジェクト

連想配列を初期化する例を示す。

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

dict.Add "key1", "value1"
dict.Add "key2", "value2"

dict.RemoveAll

For Each key In dict
  Debug.Print key
  Debug.Print dict.Item(key)
Next