Excelシートのコピー時に発生する「名前が既に存在します」ループを止める方法

intermediate📊 Microsoft Excel2026-07-20| WindowsおよびmacOS上のMicrosoft Excel for Microsoft 365、Excel 2021、2019、2016、2013。

Error Message

The name 'PrintArea' already exists. Click Yes to use that version of the name, or click No to rename the version of the 'PrintArea' you're moving or copying.
#excel#vba#トラブルシューティング#名前定義#生産性

苛立たしいダイアログのループExcelにおいて、消しても消しても出てくるダイアログボックスほど厄介なものはありません。シートを右クリックして移動またはコピーしようとした瞬間、罠にはまります。名前の競合を解消するために「はい」をクリックしても、またすぐに表示されます。何度も、何度も。たった1回のコピー操作を完了させるために、50回も60回も「はい」をクリックしなければならないこともあります。

The name 'PrintArea' already exists. Click Yes to use that version of the name, or click No to rename the version of the 'PrintArea' you're moving or copying.

このループは通常、Print_TitlesCriteria_FilterDatabase といった名前で発生します。1つ名前を変更したとしても、Excelはメタデータ内に隠された別の名前を次々と見つけ出します。

問題の根本的な原因この競合は、コピー元のシートとコピー先のブックが同じ**名前定義(Named Ranges)**を共有しているために起こります。シートを移動する際、Excelはそのシートに関連するすべての設定(いわば「荷物」)を一緒に持っていこうとします。移動先にすでに「Print_Area」のようなグローバルな名前が存在する場合、Excelはどちらの定義を優先すべきか判断できなくなります。

さらに厄介なのは、これらの名前の多くが「不可視」であることです。これらは、以前のマクロやBloomberg、Solverといったサードパーティ製のプラグイン、あるいは古い .xls ファイルによって生成された「ゴースト」の名前です。非表示になっているため、標準のリストには表示されず、手動で削除することは不可能です。

方法1:手動でのクイックチェックコードを使う前に、名前定義が単に設定の奥深くに埋もれていないか確認しましょう。これは、以前のユーザーが手動で名前定義を作成していた場合に有効です。

  • コピー元のブックを開きます。- 数式タブに移動し、名前の管理をクリックします(または Ctrl + F3 を押します)。- 「参照範囲」列に #REF! エラーが含まれている名前を探します。- これらの破損した、あるいは競合している名前を選択し、削除をクリックします。名前の管理が空に見えるのにエラーが解消されない場合、その名前は非表示になっています。その場合は、方法2で強制的に表示させる必要があります。

方法2:VBAで非表示の名前をクリーンアップする(プロの方法)VBAは、これらのプロンプトを停止させる最も確実な方法です。これらのスクリプトは、Excelのインターフェースが無視する非表示のプロパティをターゲットにします。

オプションA:まず、すべてを表示する削除する前に名前を確認したい場合は、このコードを使用してください。ファイル内のすべての名前の「可視」スイッチをオンにします。

Sub UnhideAllNames()
    Dim xName As Name
    For Each xName In ActiveWorkbook.Names
        xName.Visible = True
    Next xName
    MsgBox "名前の管理を確認してください。すべての非表示の名前が表示されました。"
End Sub

オプションB:「核」クリーンアップ(一括削除)単にエラーを止めたいだけなら、このスクリプトを使用してください。すべての非表示の名前と、#REF! エラーを含む名前を自動的に一掃します。

Sub CleanUpNames()
    Dim xName As Name
    Dim xCount As Long
    On Error Resume Next
    For Each xName In ActiveWorkbook.Names
        ' 非表示の名前、または #REF! エラーを含む名前を削除
        If Not xName.Visible Or InStr(1, xName.Value, "#REF!") > 0 Then
            xName.Delete
            xCount = xCount + 1
        End If
    Next xName
    MsgBox xCount & " 個のゴースト名が正常に削除されました。", vbInformation
End Sub

修正を適用する方法:- Alt + F11 を押してVBAエディタを開きます。- 上部メニューで 挿入 > 標準モジュール をクリックします。- 開いたウィンドウに選択したスクリプトを貼り付けます。- F5 キーを押してすぐに実行します。## 方法3:PrintAreaの競合を回避するエラーが特に PrintArea に言及している場合、両方のブックに厳密なページ設定がなされていることが原因であることが多いです。移動前に印刷設定を解除することで、チェックをバイパスできる場合があります。

  • コピー元のシートで、ページ レイアウトタブに移動します。- プリントエリアをクリックし、プリントエリアのクリアを選択します。- 再度、移動またはコピー操作を試してください。競合の原因となっていた特定のメタデータが削除されたため、通常はこれで解決します。## 修正の確認方法クリーンアップを実行したら、名前の管理Ctrl + F3)を開きます。リストが空であるか、日常的に使用している範囲のみが表示されているはずです。もう一度シートのコピーを試してください。ポップアップが一度も出ずに即座に移動できれば、キャッシュのクリアは成功です。

クリーンなブックを維持するためのプロのコツ- 名前の範囲(スコープ)を限定する: 新しい名前を作成するときは、範囲を「ブック」ではなく特定の「シート」に変更します。これにより、名前がローカルに保持され、グローバルな競合を防ぐことができます。- 古いファイルに注意: 1997-2003形式の古い .xls ファイルを .xlsx に変換すると、数十年前の非表示の名前のゴミがインポートされることがよくあります。変換後すぐにクリーンアップスクリプトを実行しましょう。- 値のみ貼り付け: 数式が必要ない場合は、シートごとコピーしないでください。Ctrl + A で全選択、Ctrl + C でコピーし、新しいブックで値の貼り付けを行います。これにより、隠れたメタデータをすべて残してデータだけを移動できます。

Related Error Notes