このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2023年1月13日

このエラーは辞書型(Dictionary)変数に同じkeyで2回追加しようとしたときに発生します。

辞書型変数は同じキーを複数持てないようになっています。

エラーを回避するためには使用するkeyの名前を変更する必要があります。

エラーが起こるケースを2つサンプルコードとともに紹介します。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

エラーが起こるサンプルコード

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

Posted by やろまい