【実行時エラー457】このキーは既にこのコレクションの要素に割り当てられています(VBA)
このエラーは辞書型(Dictionary)変数に同じkeyで2回追加しようとしたときに発生します。
辞書型変数は同じキーを複数持てないようになっています。
エラーを回避するためには使用するkeyの名前を変更する必要があります。
エラーが起こるケースを2つサンプルコードとともに紹介します。
エラーが起こるサンプルコード
Sub DicError1()
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "a", 1
dic.Add "a", 2 '同じkey "a" で2回追加したのでエラーとなる
End Sub
このようにkey “a"を2回追加しようとするとエラーになります。
しかし実際はこのようなシンプルなコードではエラーを起こすことはないと思います。
Sub DicError2()
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
Dim arr_keys, arr_items, i As Long
arr_keys = Array("a", "b", "c", "d", "a") 'keyに"a"が2つ含まれている
arr_items = Array(1, 2, 3, 4, 5)
'配列を使っているので原因に気付きにくい
For i = LBound(arr_keys) To UBound(arr_keys)
dic.Add arr_keys(i), arr_items(i)
Next
End Sub
エラーが起こるとしたらこのように配列やセル情報を辞書型変数に追加するケースでしょう。
この場合は配列をウォッチウィンドウに追加して、どのようなkeyを入力しようとしているか確認してみましょう。