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ライブラリの参照設定が必要です。
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エキスパート」をご確認ください。