【EXCEL VBA】Dictionaryについてまとめて知りたい 応用編(要素上書き、キー上書き、注意点)

以下記事で紹介したDictionary基礎編は確認していただいたでしょうか?今回は応用編となります。

要素上書き

既に存在するキーに対してAdd関数を実行すると実行時エラーとなりました。よって、要素上書きにAdd関数は利用できません。

そこで、キーを変えずに要素を変える方法を紹介します。方法は3種類です。

 ・RemoveしてからAddする
 ・dic.item(“key”) = “value” 
 ・dic(“key”) = “value”

1番目は処理が冗長となるのでお勧めしません。2番目か3番目は、書き方が異なりますが処理結果は同一です。また、要素上書きとして紹介していますが、存在しないキーに対して上記処理を行うと、Add関数と同様の処理になります。

キー上書き

要素はそのままでキーだけ上書きする方法を紹介します。KEY関数を利用します。以下の例では、要素はそのままで、キーが”BeforeKEY”から”AfterKEY”に上書きされます。

 ・dic.KEY(“BeforeKEY”) = “AfterKEY”

Dictionaryの注意点

存在しないキーを参照するだけで、Emptyの要素がDictionaryに追加されてしまいます。どのような現象が発生するかはサンプルプログラムを確認してください。

サンプルプログラム

Sub sample()
  
  Dim dic As New Dictionary
  
  ' 要素の上書き(追加)
  dic.Add "Feb", "2月"
  dic.item("Apr") = "4月"
  dic("Sep") = "9月"
  
  ' 要素上書き
  dic.item("Jan") = "XXX月"
  Debug.Print dic.item("Jan")        ' XXX月
  dic.item("Jan") = "1月"
  Debug.Print dic.item("Jan")        ' 1月
  
  ' キーの上書き
  dic("hogehoge") = "12月"
  Debug.Print dic("hogehoge")        ' 12月
  dic.KEY("hogehoge") = "Dec"
  Debug.Print dic("Dec")             ' 12月
  
  ' Dictionaryの注意点(キーが存在しない場合、dic.itemで参照するだけでDictionaryに追加されます)
  Debug.Print dic.Exists("fugafuga") ' False
  Debug.Print dic.Count              ' 5
  Debug.Print dic.item("fugafuga")   ' 何も表示されない。★Dictionaryに追加される
  Debug.Print dic.Exists("fugafuga") ' True
  Debug.Print dic.Count              ' 6

End Sub

出力結果

XXX月
1月
12月
12月
False
 5 

True
 6