【実行時エラー457】このキーは既にこのコレクションの要素に割り当てられています(VBA)

2023年1月13日

このエラーは辞書型(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を入力しようとしているか確認してみましょう。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2023/02/07 15:31:32時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい