Addメソッド(Dictionary)

Dictionaryオブジェクトにデータを新規追加するメソッドです

'データを新規追加する
zz辞書.Add 1, "い"

Dictionaryオブジェクトのリストにデータを追加するには、Addメソッドを使用します
このメソッドは追加になるので、指定のインデックス番号の箇所に挿入するような動作は出来ません

メソッドの書式

引数(太字は必須引数)
Add key, item

引数は2つで、どちらも必須項目になります
また、この2つがペアとしてオブジェクトにデータが登録されます

「key」は、データを検索や取得を行う際に目印となるデータです
ここのデータは重複したデータは登録できませんので、重複する場合は実行時エラーが発生します
また配列以外のデータで指定する必要があります、連番であったり管理コードなどでも構いませんが1つのデータにする必要がある訳です

「item」は、Keyにペアリングされるデータになります
ここは配列データやオブジェクトも代入させることができますので、比較的自由に指定できます
基本的に、このデータを取得することになります

実際の使用例

zz辞書.Add 1, "あ"

基本的なデータの追加方法です
keyとして「1」を、itemとして「”あ”」を追加します

これで、keyの「1」を指定した場合「”あ”」が取得されるデータが作成されます

1つ目のデータの取得と出力
データを追加した状態

画像はコードによりデータを追加作成した後の状態です
まず、右側のローカルウィンドウの辞書にitemが追加されて値が「1」になっていることが確認できます
なお、ローカルウィンドウではitemを確認することができませんのでkeyのみが表示された状態です

次に左下のイミディエイトを確認してください
追加したデータを出力しています、itemに登録した「あ」が出力されています

zz辞書.Add 2, Range("A1:A3")

2つ目はitemにオブジェクトを取得させてみます
Rangeオブジェクトを指定することで、そのセル範囲をkeyから取得することが出来ます

itemにRangeオブジェクトを代入させたとき
Rangeオブジェクトを操作した状態

イミディエイトを確認してください
2行出力されています

まず1行目は、取得させたRangeオブジェクトのAddressプロパティを出力しています
取得がA1~A3なので、そのセルアドレスが出力されています
このことからもitemにしっかりセル範囲が取得できていることが分かります

そのセルに値を代入してみます、その代入した値を再度イミディエイトに出力しています
「zz辞書(2)(2) = 100」の部分が、セルへの値入力の箇所になります
このうちzz辞書(2)はRange(“A1:A3”)と同義になるので、「Range(“A1:A3”)(2) = 100」と書き換えることが出来ます
このセル範囲の2番目のセルなので、A2が指定されることになります

なので、イミディエイト2行目の100はA2セルの入力値であることが分かります

インテリセンスも使用できず、分かりにくいことこの上ないので、あまりこういった使い方はしないかもしれませんが、オブジェクトも可能ということです
ユーザーフォームなどオブジェクトの多い時には役に立つかもしれませんね

zz辞書.Add 3, Array("あ", "い")

ここでは配列データをitemに取得させています
2次元配列の2次元目を追加しているようなイメージになりますね

itemに配列を代入した時
配列データを取得させる

1次元の配列データを取得させています
「”あ”,”い”」の2つの要素を含む配列データになります

その配列から特定のデータを取得するには、要素数のインデックス番号で指定することで可能です
配列のインデックス番号は0から始まりますので、「zz辞書(3)(1)」は2番目の要素を指定することになります

イミディエイトには2番目の要素である「い」が出力されています

こちらもオブジェクト同様、イメージしづらく
なによりローカルで確認できないので、処理作成はやりづらいです

要は、itemには数値や文字列だけでなく配列もオブジェクトも代入させることが出来るという点に理解を持っておいてもらえれば何かの役に立つときが来ます

zz辞書.Add Array("あ", "い"), 4

これはエラーになるコードです
keyに
配列データを指定しているためです

keyに配列を指定した場合のエラーメッセージ
実行時エラーのメッセージ

画像の様に実行時エラーが発生します
keyには配列データを指定することは出来ません

これをしたいなら、keyを「あ」と「い」の2つを登録して、itemは同じ値を取得させるようにします

なお、オブジェクトの取得は可能ですが、使う事は無いでしょう

必要なデータを分かり易くリスト化して扱うのが、このDictionaryオブジェクトです
処理速度も速いのでサクサク登録していきましょう