'辞書のアイテムを変更
A("C") = "9999"
'番号を指定してアイテムを変更
Dim C
C = A.keys
A(C(2)) = "9999" '辞書のキーを変更
では、解説していきます。
Dictionaryに登録したアイテムを変更する
「Dictionary」に登録した「アイテム」を変更してみます。
キーで検索してアイテムを変更する
1つ目の方法で、「キーで検索」してアイテムを変更してみます。
「A(キー)」でキーで検索することで、アイテムを取得できますので、変更後のアイテムを入力します。
Sub TEST1()
'辞書を登録
Dim A
Set A = CreateObject("Scripting.Dictionary")
'値を登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
'辞書のアイテムを変更
A("C") = "9999"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
変更前の値は、こんな感じです。
変更前の値
では、VBAコードを実行して、変更した後の値をみてみます。
アイテムを変更できた
「アイテム」を変更できました。
Existsでキーを確認してアイテムを変更する
キーで検索して変更する方法では、、「Exists」でキーを確認してアイテムを変更した方がいいです。
未登録のキーで検索してしまうと、新しく登録されてしまうからです。
ちょっとやってみます。
未登録のキーで検索すると登録されちゃう
未登録のキーで検索してみます。
Sub TEST2()
'辞書を登録
Dim A
Set A = CreateObject("Scripting.Dictionary")
'値を登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
'アイテムを変更
A("FFFF") = "9999" '←登録されていないキーだと登録されちゃう'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
Sub TEST3()
'辞書を登録
Dim A
Set A = CreateObject("Scripting.Dictionary")
'値を登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
'「キー」が登録されているか確認
If A.exists("FFFF") = True Then
'アイテムを変更
A("FFFF") = "9999" '←登録されていない場合は、変更しない
End If
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
では、VBAコードを実行してみます。
「"FFFF"」というキーは登録されていないので、そのままの値となりました。
番号でアイテムを変更する
2つの目の方法で、「番号を指定」してアイテムを変更してみます。
ポイントは、キーの値を配列に入力して、配列の値を使って「Dictionary」を検索します。
Sub TEST4()
'辞書を登録
Dim A
Set A = CreateObject("Scripting.Dictionary")
'値を登録する
A.Add "A", "10"
A.Add "B", "20"
A.Add "C", "30"
A.Add "D", "40"
A.Add "E", "50"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
'辞書のキーを取得
Dim C
C = A.keys
'2番目のアイテムを変更(要素は0番目から始まる)
A(C(2)) = "9999"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub