VBA で辞書を作成して利用する

Glen Alfaro 2023年1月30日
  1. 前提条件
  2. VBA を使用して Dictionary オブジェクトを作成する
  3. VBA を使用して Dictionary オブジェクトにアイテムを追加する
  4. VBA を使用して Dictionary に値を返す
  5. VBA を使用して Dictionary の値を変更する
  6. VBA を使用して Dictionary のアイテムを数える
  7. 辞書内のすべてのキーと値を出力する
VBA で辞書を作成して利用する

VBA の Dictionary オブジェクトは、単語の意味を知るために使用する言語辞書とは関係ありません。

VBA では、Dictionary オブジェクトは、データの保存において Collection オブジェクトに似ています。主な違いは、Collection では次のことができないことです。

  1. アイテムがコレクションにあるかどうかを確認します
  2. 既存のアイテムの値を変更します

もちろん、引き続き Collection を使用してこの問題の回避策を作成できますが、Dictionary は事前定義されたメソッドを使用してこれらのソリューションを提供します。したがって、Dictionary は、特定のタスク、特に特定のアイテムを取得する場合に役立ちます。

この記事では、Dictionary オブジェクトを作成して利用し、VBA コードで特定の機能を実行する方法を示します。

前提条件

Dictionary オブジェクトには、VBA のデフォルトライブラリが付属していません。したがって、Dictionary オブジェクトを完全に利用する前に、Dictionary オブジェクトを含む Microsoft Scripting Runtime ライブラリを参照する必要があります。

  • Excel ファイルを開きます。
  • 開発者タブから、Visual Basic エディターを開きます。
  • ツールバーの Tools から References をクリックする。
  • Microsoft Scripting Runtime チェックボックスにチェックマークを付けます。

これですべての設定が完了しました。

VBA を使用して Dictionary オブジェクトを作成する

Microsoft Scripting RuntimeReferences に含まれるようになったので、以下のコードブロックは Dictionary オブジェクトを作成する方法を示します。

Scripting.Dictionary ライブラリからオブジェクトを作成し、それを新しいオブジェクトとして初期化します。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

End Sub

VBA を使用して Dictionary オブジェクトにアイテムを追加する

構文:

[DictionaryObject].Add([Key], [Item])

パラメーター:

[DictionaryObject] 必須。Dictionary の名前
[Key] 必須。Dictionary 内で Item が参照されるデータ。
[Item] 必須。Dictionary のアイテムの値を設定または返します

以前のコードブロックを使用して、Dictionary にアイテムを追加できます。名前(Glen、Myla、Katrina、Jose)がキーとして追加され、それぞれの年齢が以下のコードブロックの値として追加されました。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

d.Add ("Glen", 25)
d.Add ("Myla", 49)
d.Add ("Jose", 58)
d.Add ("Katrina", 18)

End Sub

VBA を使用して Dictionary に値を返す

Dictionary を使用すると、それに対応するキーを知ることで値を返すことができます。

戻り構文:

[Value] = [DictionaryObject](Key)

構文の変更:

[DictionaryObject](Key) = [Value]

パラメーター:

[DictionaryObject] 必須。Dictionary の名前
[Key] 必須。Dictionary 内で Item が参照されるデータ。
[Value] 必須。Dictionary のアイテムの値を設定または返します

構文を使用すると、キーMyla の値は 49 を返しました。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

d.Add "Glen", 25
d.Add "Myla", 49
d.Add "Jose", 58
d.Add "Katrina", 18

Debug.Print d("Myla")

End Sub

出力:

49

VBA を使用して Dictionary の値を変更する

Dictionary を使用すると、それに対応するキーを知ることで値を変更できます。

変更の構文:

[DictionaryObject](Key) = [Value]

パラメーター:

[DictionaryObject] 必須。Dictionary の名前
[Key] 必須。Dictionary 内で Item が参照されるデータ
[Value] 必須。Dictionary のアイテムの値を設定または返します

以下のコードブロックでは、上記の構文を使用して、キーMyla の値が 49 から 50 に変更されました。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

d.Add "Glen", 25
d.Add "Myla", 49
d.Add "Jose", 58
d.Add "Katrina", 18

d("Myla") = 50

Debug.Print d("Myla")

End Sub

出力:

50

VBA を使用して Dictionary のアイテムを数える

Count メソッドを使用して、Dictionary 内のすべての要素の数を返すことができます。
カウント構文:

[Value]= [DictionaryObject].Count

パラメーター:

[DictionaryObject] 必須。Dictionary の名前
[Value] Dictionary のアイテム数を返します

以下の例では、Count メソッドを使用して d オブジェクトのコンテンツを取得します。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

d.Add "Glen", 25
d.Add "Myla", 49
d.Add "Jose", 58
d.Add "Katrina", 18

Debug.Print "There are " & d.Count & " items in the Dictionary."

End Sub

出力:

There are 4 items in the Dictionary.

辞書内のすべてのキーと値を出力する

以下のコードブロックは、ループを使用して Dictionary 内のすべてのキーと値を出力します。

Sub DictionaryDemo()

Dim d As Scripting.Dictionary

Set d = New Scripting.Dictionary

d.Add "Glen", 25
d.Add "Myla", 49
d.Add "Jose", 58
d.Add "Katrina", 18

Dim Key as Variant

For Each Key In d.Keys
    Debug.Print Key, d(Key)
Next

End Sub

出力:

Glen           25 
Myla           49 
Jose           58 
Katrina        18