Mihata
仕事効率化(DX)2026.09.30

エクセル 名前の重複エラーを一括で消す手順と退避策

結論:ダイアログを1つずつ閉じるより、名前の管理でまとめて消す

シートをコピーするたびに「名前 '○○' は既に存在します」が延々と出るのは、コピー元とコピー先の両方に同じ「定義された名前」があるためです。Microsoft も、このダイアログが出る理由を「1つ以上のワークシートを、同じ名前の範囲を持つブックにコピーしようとしているため」と明記しています(Why am I seeing the Name Conflict dialog box in Excel?)。そしてこのダイアログは衝突している名前1件ごとに出るため、名前が200件育っていればOKを200回押すことになります。

止め方は3手です。①コピー元のブックで Ctrl+F3(名前の管理)を開く、②フィルターで「エラーのある名前」に絞って一括削除する、③残ったものだけを参照範囲を見て1件ずつ判断する。定義された名前は最大255文字で、スコープ(ブック全体かシート単位か)の中で必ず一意である必要があるので、余分な名前を消してしまえば衝突そのものが消えます。

ただし名前の管理には出てこない名前と、出てくるが消せない名前が存在します。そこに当たったら深追いせず「値のみで新規ブックへ退避」に切り替えるのが早い、という線引きまでこの記事で示します。「コピー操作そのものが実行できない」場合は原因が別なので、エクセルでシートのコピーができない原因7つと対処を先に見てください。

なぜ「名前の重複」ダイアログが出るのか

名前はスコープの中で一意でなければならない

定義された名前には、ブック全体に効く「グローバル(ブックレベル)」と、特定のシートだけに効く「ローカル(ワークシートレベル)」の2つのスコープがあります。Microsoft は「A name must always be unique within its scope(名前はスコープ内で常に一意でなければならない)」とし、両方に同じ名前があるときは「the local worksheet level takes precedence over the global workbook level(ローカルのワークシートレベルがグローバルのブックレベルより優先される)」と定めています。

シートのコピーは、そのシートに紐づくローカルの名前を丸ごとコピー先へ持っていきます。コピー先に同名のブックレベルの名前があると一意性が崩れるため、Excel が「どちらを採用するか」を尋ねてくる——これが名前の重複ダイアログの正体です。実務で多いのは、同じ月次台帳を何年もシートのコピーで横展開してきたブックで、誰も使っていない名前が数百件まで育っているケースです。

[はい]と[いいえ]が実際にやっていること

公式の説明では、[はい]はコピー先にある同名の定義を採用します。結果として「似た名前の範囲が2つある状態」になり、既存の数式がどちらを見るかで計算がずれる危険が残ります。[いいえ]を選ぶと改名ダイアログが開き、そこで入力する新しい名前には次の制約がかかります。

  • 先頭の文字は、文字・アンダースコア(_)・円記号(\)のいずれか
  • A1 や XFD21 のようなセル参照と同じ名前にはできない
  • スペース、および \ / * [ ] : ? は使えない
  • コピー先にすでにある名前と同じものは使えない

サブスクリプション版の Excel には[すべてはい]があり、衝突している名前をまとめて処理できます。ただし公式も注意しているとおり、数式がずれるリスクは[はい]と同じです。OKを押し切ることは「解決」ではなく「重複の追認」だと理解しておいてください。

一括で片付ける手順(Ctrl+F3 → フィルター → まとめて削除)

作業の前に、必ずブックの複製を1つ作ってください。名前の削除は元に戻せない操作が混ざります。

  1. コピー元のブックを開き、Ctrl+F3(または[数式]タブ>[定義された名前]>[名前の管理])を開く。
  2. ダイアログ右上の[フィルター]で「エラーのある名前」を選ぶ。参照範囲が #REF! や #VALUE! になっている、すでに機能していない名前だけが残る。
  3. 一覧の先頭をクリックし、Shift を押しながら末尾をクリックして全選択する。[削除]を1回押す。
  4. フィルターを「ワークシートにスコープが設定されている名前」に切り替え、コピーしたいシート由来の名前を確認する。
  5. [参照範囲]列を見て、参照先が存在しない・使っていない表を指している名前を削除する。
  6. Ctrl+F3 を閉じ、シートのコピーをもう一度試す。

フィルターには「ワークシートにスコープが設定されている名前」「ブックにスコープが設定されている名前」「エラーのある名前」「エラーのない名前」「定義された名前」「テーブル名」があり、この掛け合わせで対象を絞り込めます。名前の管理の削除は複数選択が効くので、ここまで絞ってから一気に消すのが最短です。

正直に書いておくと、名前を削除すると、その名前を参照していた数式は #REF! になります。Microsoft は #REF! を「数式が有効でないセルを参照しているときに表示される」としており、参照先が消えたあとに自動で復旧する仕組みはありません。削除のあとは Ctrl+F で「#REF!」をブック全体から検索し、出てこないことを確認してください。出てしまったら、複製しておいたブックから該当の名前だけを作り直します。エクセルの循環参照が消えない時の探し方と直し方と同じで、壊れた場所を機械的に探せる状態にしてから消すのが事故を減らすコツです。

消してよい名前・残すべき名前の判断表

名前の種類

名前の管理での見え方

判断

参照範囲が #REF! になっている名前

フィルター「エラーのある名前」で出る

まとめて削除してよい(すでに機能していない)

Print_Area / Print_Titles

印刷範囲・印刷タイトルとして出る

消すと印刷レイアウトも消える。毎月同じ体裁で印刷しているなら残す

テーブル名(テーブル機能由来)

フィルター「テーブル名」で出るが削除できない

テーブルを範囲に変換するか、テーブル名を変更する

入力規則・条件付き書式が参照している名前

ふつうの定義された名前として出る

消すとプルダウンや色分けが壊れる。先に参照元を確認

INDIRECT や外部参照の中で文字列として使われている名前

ふつうの定義された名前として出る

名前の文字列でブック全体を検索するまで消さない

非表示の名前(アドイン・VBA 由来)

そもそも一覧に出ない

後述の公式マクロでしか操作できない

4行目と5行目が実務でいちばん事故ります。名前の管理は「その名前がどこで使われているか」を表示しません。とくに INDIRECT は名前を文字列として組み立てるので、一覧を見ただけでは使用中かどうか判断がつきません。Microsoft も INDIRECT が閉じたブックを参照すると #REF! になると明記しており、外部参照が絡むと開いているときだけ動く状態になりがちです。消す前に、名前の文字列で Ctrl+F をかけるひと手間を必ず挟んでください。

名前の管理に出てこない「非表示の名前」を出す

Ctrl+F3 の一覧を空にしたのにダイアログが出続ける場合、原因は非表示の名前です。Microsoft は名前の管理について「Visual Basic for Applications (VBA) で定義された名前や非表示の名前が表示されません」と明記しています。さらに、ソルバーなどのアドインが計算パラメーターを非表示の名前として保存することがあり、ドキュメント検査では検出できても削除はできません(「ドキュメント検査では、これらの非表示の名前を削除できません」)。

Microsoft が公開している対処は VBA マクロだけです。以下は公式ページに掲載されているコードで、ブック内の名前を1件ずつ「Visible / Hidden」の区別と参照先つきで表示し、削除するかを尋ねてきます。

' Module to remove all hidden names on active workbook

Sub Remove_Hidden_Names()

 Dim xName As Variant

 Dim Result As Variant

 Dim Vis As Variant

 For Each xName In ActiveWorkbook.Names

  If xName.Visible = True Then

   Vis = "Visible"

  Else

   Vis = "Hidden"

  End If

  Result = MsgBox(prompt:="Delete " & Vis & " Name " & _

   Chr(10) & xName.Name & "?" & Chr(10) & _

   "Which refers to: " & Chr(10) & xName.RefersTo, _

   Buttons:=vbYesNo)

  If Result = vbYes Then xName.Delete

 Next xName

End Sub

使い方は、Alt+F11 で Visual Basic Editor を開き、[挿入]>[標準モジュール]に上のコードを貼り、F5 で実行するだけです。そのうえで、マクロを使うリスクを3つ正直に書いておきます。

  • アドインが壊れる可能性:公式の警告どおり「アドイン (ソルバーなど) またはマクロが期待どおりに動作しないことがあり、これらに関連する非表示のデータが失われる可能性があります」。
  • マクロを動かせない環境がある:実行にはマクロの有効化が必要で、ブックを .xlsm で保存するか個人用マクロブックを使うことになります。社内ポリシーでマクロが禁止されていれば、この手は選べません。
  • 結局ボタンを押し続けることになる場合がある:上のコードは1件ずつ確認を求めるので、非表示の名前が数百件あるとダイアログ地獄が別の場所に移るだけです。

したがって順番が大事です。まず名前の管理で見える名前を片付け、それでも出るときだけマクロを1回走らせる。走らせる前にブックを複製する。この2つを守れば、失敗しても引き返せます。

出てくるのに消せない名前の3パターン

テーブル由来の名前

テーブル機能(Ctrl+T)で作った表には、テーブル名という名前が自動で付きます。名前の管理のフィルター「テーブル名」で一覧には出ますが、ここから削除することはできません。消したいならテーブル自体を範囲に変換します(テーブル内を選択 →[テーブルデザイン]>[範囲に変換])。名前を変えるだけなら[テーブルデザイン]>[プロパティ]>[テーブル名]で付け替えます。命名規則はふつうの名前と同じで、「名前は常に文字、アンダースコア文字(_)、またはバックスラッシュ(\)で始めてください」「名前にスペースは使用できません」「テーブル名は255文字以内」「名前で大文字と小文字が区別されません」と公式に書かれています。

印刷範囲・印刷タイトル

印刷範囲を設定すると Print_Area、行や列の見出しを繰り返す設定をすると Print_Titles という名前が作られます。Excel が内部で使う名前なので、シートを増やすたびに増えます。名前の管理から削除自体はできますが、消すと印刷設定が失われます。提出用の帳票を毎月同じ体裁で印刷しているなら、これは残す判断が正解です。

シートにスコープされた名前

ローカル(ワークシートレベル)の名前は、対象のシートがある限りそのシートに紐づきます。「消したはずなのにまた出る」ときに多いのは、コピー先ブックの名前だけを消してコピー元シートの名前が残っている(あるいはその逆)というパターンです。フィルターを「ワークシートにスコープが設定されている名前」にして、コピー元・コピー先の両方のブックで同じ確認をすると一度で片が付きます。

どこで諦めて退避するか

ここまでで直らないブックは、たいてい何年も継ぎ足してきた台帳で、名前の由来を知っている人がもういません。作業を止めないほうが大事なので、先に線引きを決めておきます。

状況

取る手

失うもの

エラーのある名前が大量にあり、数式で使っている名前は数件だけ

名前の管理でエラー分を一括削除

すでに壊れていた名前(実害なし)

一覧を空にしてもダイアログが出る

公式マクロで非表示の名前を削除

ソルバー等のアドインが保存していた情報

原因がテーブル名・印刷範囲

テーブルを範囲に変換/印刷設定を作り直す

テーブルの自動書式・印刷レイアウト

名前がどこで使われているか誰も分からない

新規ブックへ「値のみ」で貼り直す

数式・名前・入力規則・条件付き書式のすべて

毎月このコピー作業が発生している

台帳そのものをアプリ化・スプレッドシート化

Excel での自由な手編集

「値のみ」での退避は具体的にこう進めます。新規ブックを作り、元シートの左上角をクリックして全セルを選択して Ctrl+C、貼り付け先で[貼り付けのオプション]>[値]を選ぶ。体裁も要るなら[値と元の書式]。この方法は数式と名前を丸ごと捨てるので、名前の重複は原理的に起きません。逆に言えば集計の仕組みも全部捨てるので、提出用の1枚を今すぐ作りたいときの手だと割り切ってください。仕組みが要るシートは、退避と並行して作り直す前提で計画します。

再発防止:名前の定義に頼った台帳から降りる

名前が数百件まで育つブックには共通点があります。シートのコピーで月次・案件別に横展開してきたこと、そして集計を名前と INDIRECT で組んでいることです。名前は数式を読みやすくする良い機能ですが、名前の管理は参照元を表示しないので、作った本人が抜けると「消してよいか」を判断する手がかりが誰にも残りません。これは Excel の欠陥ではなく、台帳の作り方が属人化しているサインです。

現場で効く手当ては3つあります。1つ目は命名規則を決めて接頭辞を付けること(例:m_売上、t_単価表)。名前の一覧を並べ替えたときに由来が読める状態を作ります。2つ目は、シートのコピーで増やすのをやめ、1シート=1テーブルにして行を足す形へ変えること。これだけでローカルの名前が増えなくなります。3つ目は、そもそも Excel で持つべきでないデータを Excel から出すことです。

台帳が「毎月コピーして、名前のダイアログを閉じて、集計が合わないと誰かが直す」状態になっているなら、ファイルの問題ではなく仕組みの問題です。同じ表をスプレッドシートに移し、入力画面と集計を分けてしまえば、シートのコピー自体が不要になります。Mihata では、こうした Excel 台帳を見た目を変えずに社内アプリへ置き換える支援をしています。開くだけで待たされる段階まで来ているなら、エクセルの動作が遅い原因と対処法もあわせて確認してください。

よくある質問

名前の重複ダイアログで[はい]を押し続けても大丈夫ですか?

作業は進みますが解決ではありません。公式の説明では[はい]はコピー先の同名の定義を採用するため、似た名前の範囲が2つある状態になり、既存の数式がどちらを見るかで計算がずれる危険が残ります。押し切る前に Ctrl+F3 でコピー元の名前を整理するほうが確実です。

Ctrl+F3 で名前を全部消したのに、まだダイアログが出ます。

非表示の名前が残っている可能性が高いです。Microsoft は名前の管理に「VBA で定義された名前や非表示の名前が表示されません」と明記しています。公式ページに掲載された Remove_Hidden_Names マクロでのみ削除できますが、ソルバー等のアドインが動かなくなる可能性があるため、必ずブックを複製してから実行してください。

名前を削除したら数式が #REF! になりました。元に戻せますか?

削除後に自動で復旧する仕組みはありません。保存前なら Ctrl+Z、保存してしまった場合は削除前の複製から同じ名前を作り直します。だからこそ削除の前にブックを複製し、削除後は Ctrl+F で「#REF!」をブック全体から検索して確認する手順をセットにしてください。

テーブル名が名前の管理から削除できません。

テーブル機能由来の名前は、一覧には出ますが名前の管理からは削除できません。テーブル内を選択して[テーブルデザイン]>[範囲に変換]でテーブルを解除するか、[テーブルデザイン]>[プロパティ]>[テーブル名]で別の名前に変更します。命名規則は255文字以内・先頭は文字かアンダースコアか円記号・スペース不可です。

名前の重複が二度と出ないようにできますか?

シートのコピーで台帳を横展開する運用をやめるのが根本策です。1シート=1テーブルにして行を足す形に変えるか、入力と集計を分けたスプレッドシート/社内アプリに移すと、ローカルの名前が増えないためダイアログ自体が発生しなくなります。

まずはお気軽にご相談ください

AI・IT・デザインに関するお悩みやご相談、お見積りのご依頼など、
どんなことでもお気軽にお問い合わせください。

お問い合わせ