Excel VBA キーと値のペアを格納するDictionary(ディクショナリ)

 

Excel VBAの Dictionary(ディクショナリ)は、キーと値のペアを格納するデータ構造です。主な目的は、特定のキーに対応する値を高速に検索・取得することです。具体的な使い方や、注意点やサンプルコードを紹介します。

 

Excel VBA キーと値のペアを格納するDictionary(ディクショナリ)の利用

以下のようなシーンで利用されます。

1.同じキーを持つデータを重複させないように管理したい。

2.多くのデータの中から、特定のキーに基づいて高速に値を検索する。

3.キーと値のペアでデータを保存する。
例えば、顧客IDと顧客名、製品コードと在庫数など、関連する情報をペアで保持したい場合。

5.ループなどで生成されたデータを効率的に一時的に保存するために使用できます。

6.配列やコレクションだけでは表現しづらい、複雑なデータ構造を構築するのに役立ちます。

 

なぜ検索で値を探さないのか?

Dictionary(ディクショナリ)は、シートやデータを1つ1つ探さなくても、名前を付けて管理できるので、一瞬で必要なデータが取り出せるからです。

たとえば、
書籍シートに書籍ラベル(「科学の本」「歴史の本」、、、)と格納場所あります。
最初に1回、シートからDictionary(ディクショナリ)に登録します。

検索で書籍がどこにあるか調べる場合、Dictionary(ディクショナリ)を書籍ラベルをキーにして一瞬で存在有無がチェックできます。

シート検索の場合は、Dictionary(ディクショナリ)のように簡単かつ高速検索はできなく、毎回シートを指定して、検索キーを指定、検索してとなります。

時間もコード記述も効率化できるのがDictionary(ディクショナリ)になります。

 

使い方

1. Microsoft Scripting Runtime を参照設定で有効化します。
VBAエディタで「ツール」→「参照設定」から「Microsoft Scripting Runtime」にチェックを入れます。

2. Scripting.Dictionaryオブジェクトを作成し、Addメソッドでキーと値を追加します。

 

ポイント

キーは一意でなければなりません。重複するキーを持つ要素を追加しようとするとエラーになります。

ディクショナリを使うには、Microsoft Scripting Runtimeライブラリの参照設定が必要です。

 

Excel VBA キーと値のペアを格納するDictionary(ディクショナリ)のサンプルコード
ディクショナリの基本操作
Option Explicit

Sub DictionaryExample()
    ' Dictionaryの作成
    Dim myDict As Object
    Set myDict = CreateObject("Scripting.Dictionary")

    ' 要素の追加
    myDict.Add "Apple", 10
    myDict.Add "Banana", 5
    myDict.Add "Orange", 8

    ' 要素の取得と表示
    MsgBox "Number of Apples: " & myDict("Apple")

    ' キーの存在確認
    If myDict.Exists("Banana") Then
        MsgBox "Bananas exist!"
    End If

    ' 全要素の取得と表示
    Dim key As Variant
    Dim value As Variant

    For Each key In myDict.Keys
        value = myDict(key)
        MsgBox "Fruit: " & key & ", Quantity: " & value
    Next key
End Sub

値の更新と削除

Option Explicit

Sub UpdateAndRemoveInDictionary()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' データを追加
    dict.Add "A001", "商品A"
    
    ' 値の更新
    dict("A001") = "新しい商品A"
    MsgBox "更新後の値: " & dict("A001") ' 結果: 新しい商品A
    
    ' キーと値を削除
    dict.Remove "A001"
    If Not dict.Exists("A001") Then
        MsgBox "キーA001は削除されました"
    End If
End Sub

ExcelVBAのディクショナリは、キーと値のペアを効率的に管理し、データを扱う際に役立ちます。大規模なデータ処理や重複排除、検索などを簡単に実現でき、業務での効率化に寄与します。

Excel VBAで自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。