'辞書のキーを変更
A.Key("C") = "CCCC"
'番号を指定してキーを変更
Dim C
C = A.keys 'キーを取得
A.Key(C(2)) = "CCCC" '辞書のキーを変更
では、解説していきます。
Dictionaryに登録したキーの値を変更する
Dictionaryに登録した「キー」の値を変更してみます。
「Key」を使って値を変更する
「Key」を使って値を変更してみます。
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.Key("C") = "CCCC"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
変更する前の「Dictionary」の値をみてみます。
変更する前
では、VBAコードを実行した結果をみてみます。
「キー」を変更
「"C"」を「"CCCC"」に変更することができました。
キーの番号を使って変更する
「キーの番号」を使って変更してみます。
やり方は、キーの値を配列に入力して、配列の値を使って変更するという方法です。
先ほどと同じように「.Key」を使います。
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"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
'辞書のキーを取得
Dim C
C = A.keys
'辞書のキーを変更
A.Key(C(2)) = "CCCC"
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
変更する前の「Dictionary」の値です。
変更する前
VBAコードを実行した後の「Dictionary」の値です。
番号を指定して「キー」を変更
番号を指定して「キー」を変更できました。
キーが登録されているかを確認してから変更する
キーが登録されているかを確認してから変更する、というのをやってみます。
登録されていないキーで検索するとエラー
キーを検索して変更する方法だと、登録されていないキーで検索した場合に、エラーとなってしまいます。
ちょっとやってみます。
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
'辞書のキーを変更
A.Key("FFFF") = "CCCC" '←登録されていないキーだとエラー'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub
では、VBAコードを実行してみます。
登録されていない「キー」だとエラー
登録されていない「キー」で検索してしまうとエラーとなってしまいました。
「Exists」を使う
キーで検索して変更する場合は、「Exists」を使って、存在を確認したあとに変更するといいです。
間違って「"FFFF"」で検索してみます。
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
'「キー」が登録されているか確認
If A.exists("FFFF") = True Then
'キーを変更
A.Key("FFFF") = "CCCC"
End If
'辞書をループ
For Each B In A
'辞書を出力
Debug.Print B & " " & A(B)
Next
End Sub