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

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

2024年10月5日

このエラーは辞書型(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上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

created by Rinker
技術評論社
¥3,608 (2024/12/03 20:42:15時点 Amazon調べ-詳細)
VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい