Excel VBA の実行時エラー辞典

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

Collection の Add で、すでに登録したキーをもう一度使っていないか確認します。

よくある原因

直し方

  1. 停止した Add の直前で、追加しようとしたキーの値を確認します。
  2. 重複を除くことが目的なら、エラー 457 を「登録済み」とみなして次へ進む処理にし、それ以外のエラーとは区別します。
  3. 重複が想定外なら元データを確認し、キーの作り方(区切り文字・対象の列)を見直します。
  4. Collection を使い回す場合は、処理の最初で New を使って作り直します。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

最初のシートの A2:A10 から、重複を除いた件数を数える例です。セルの値をキーにし、空のセルは飛ばしています。

修正前

Dim seen As New Collection, cell As Range
For Each cell In ThisWorkbook.Worksheets(1).Range("A2:A10")
    seen.Add cell.Value2, CStr(cell.Value2)
Next cell

修正後

Dim seen As New Collection, cell As Range
For Each cell In ThisWorkbook.Worksheets(1).Range("A2:A10")
    If Len(cell.Text) > 0 Then
        On Error Resume Next
        seen.Add cell.Value2, CStr(cell.Value2)
        If Err.Number <> 0 And Err.Number <> 457 Then
            Debug.Print cell.Address, Err.Description
        End If
        On Error GoTo 0
    End If
Next cell
Debug.Print seen.Count

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. Add の行にブレークポイントを置き、キーにする値と、それまでに追加した件数を確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? CStr(cell.Value2), seen.Count

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料