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)
セル範囲を一気に変数(配列)に入れる ~バリアント型(Variant)変数を配列として使用する~(Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う1~ (Excel VBA)
重複しないユニークなリスト作成 ~Dictionaryオブジェクト(連想配列)を使う2~ (Excel VBA)
Dictionary オブジェクト(連想配列) CreateObject関数を使う方法・ 参照設定を使う方法 違いを理解してエラー防止(Excel VBA)
Dictionary オブジェクトに新しくキー(key)を登録し、値(item)を関連付ける(Excel VBA)

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