Dictionary オブジェクトに新しくキー(key)を登録し、値(item)を関連付ける(Excel VBA)

Dictionary オブジェクトにキー(key)を登録し、そのキー(key)値(item)を関連付けることで、キー(key)インデックス番号から値(item)を呼び出すことができるようになります。

Dictionary オブジェクトのキー(key)重複不可の仕様のため、同じキー(key)を2つ以上登録することはできません。

また、キー(key)セル値から指定する場合は、必ずセル番地の後ろに「.value」を付けなくてはいけません。(次項参照)

Dictionary オブジェクトにキー(key)を登録する方法には、Addメソッドを利用する方法、Itemプロパティを利用する方法の2つあります。

Addメソッドを利用する方法

メソッド説明
Add key, item新しいキー(key)を登録し、値(item)を関連付けます。
(キーが既に存在する場合はエラーになります。)
Dictionaryオブジェクト.Add キー, 

↑Dictionary オブジェクトに キー(key)を登録し、そのキー(key)値(item)を関連付けます。

Dictinary オブジェクトのインデックス番号は「0」から始まります。

Itemプロパティを利用する方法

プロパティ説明
Item(key)【キー(key)が登録されている場合】
・キー(key)に関連付けられた値(item)を取得します。
・「Dictionaryオブジェクト.Item(key) =別の値」で、既存のitemを別の値に変更します。
【キー(key)が登録されていない場合】
新しいキー(key)を登録し、値(item)を関連付けます。
(キーが既に存在する場合でもエラーになりません。)
いずれの場合も、「item」は省略可能。

Itemプロパティには、上記の通り色々な働きがあります。

キー(key)が登録されていない場合新しいキー(key)を登録し、値(item)を関連付けます。

キー(key)が登録されている場合、既存値(item)が別の新しい値に上書きされます。

ですので、登録済のキーが存在する場合でもエラーが出ません。Existsメソッドであらかじめキー存在確認をする必要がありません。

処理するデータ群に、同じkeyのデータが2つ以上ある場合、既存値(item)が上書きされることを考慮して使用しなければいけません。

「item」は省略することができます。

↓Itemを省略しない場合

Dictionaryオブジェクト.item(キー)= 

↓Itemを省略する場合

Dictionaryオブジェクト(キー)= 

キー(key)・値(item)にRangeオブジェクトが登録されないための「.value」の必要性

キー(key)や値(item)に指定する値に配列ではなく、セルの値を指定する場合はセル番地の後ろに「.value」を付けなければいけません。

Dictionaryオブジェクト.Add range(”A1”).value, range(”B1”).value

Dictionary オブジェクトのキー(key)・値(item)には数値や値だけではなく、オブジェクトを指定することも可能なのです。「.Valueを省略してしまうと、Rangeオブジェクトがキー(key)・値(item)として登録されてしまいます。

複数の同じテキストをキー(key)を1つにまとめたかったのに、同じテキストのキー(key)が複数存在している場合は「.value」が抜けていることが原因です。

参考

Dictionary オブジェクト(連想配列) とは ビッグデータ高速処理を可能にする技 (Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う1~ (Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う2~ (Excel VBA)
Dictionaryオブジェクト(連想配列) CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)をまとめて取得する(Excel VBA)
Dictionary オブジェクトに新しくキー(key)を登録し、値(item)を関連付ける(Excel VBA)
Dictionary オブジェクト 実行時エラー 457 を出さないために 指定したキー(key)が登録されているか確認する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)をインデックス番号から取得(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)を変更する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)をまとめて取得する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)を、キー(key)やインデックス番号を指定して取得する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録された値(item)を変更する(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)と値(item)を削除(Excel VBA)
Dictionary オブジェクト(連想配列)に登録されたキー(key)を一気に取得する(Excel VBA)
セル範囲を一気に変数(配列)に入れる ~バリアント型(Variant)変数を配列として使用する~(Excel VBA)

■■■スポンサーリンク■■■