Excelの「名前の定義」を整理する方法
シートをコピーしたときに「名前 '〇〇' は既に存在します」と何度も聞かれる。それは、ブックに不要な名前の定義がたまっているしるしです。見えるものから、見えないものまで整理しましょう。
更新日:2026年10月28日
1. 名前がたまる理由と困ること
名前の定義は、シートをほかのブックからコピーしたときに一緒に持ち込まれます。くり返すうちに、次のような名前がたまっていきます。
- #REF! の名前:参照先のシートや行が削除されて、どこも指していない
- ほかのファイルを指す名前:開くたびに「リンクの更新」を聞かれる原因になる
- 非表示の名前:「名前の管理」に表示されないので、気づけない。元のファイルの情報(ファイル名・フォルダー名など)が残っていることもある
シートのコピーで「名前 '〇〇' は既に存在します」と何度も聞かれるのも、これが原因です。
2. 「名前の管理」でエラーの名前を消す
- 「数式」タブ→「名前の管理」(Ctrl+F3)を開きます。
- 右上の「フィルター」→「エラーのある名前」を選びます。
- 表示された名前を、Shift を押しながらクリックしてまとめて選び、「削除」を押します。
参照範囲が #REF! の名前は、どこからも使えない名前なので、消しても計算は変わりません。
3. ほかのファイルを指す名前を探す
- 「名前の管理」で、「参照範囲」の列見出しをクリックして並べ替えます。
- 参照範囲に
[ファイル名.xlsx]や.xlsが入っている名前が、ほかのファイルを指している名前です。 - 使っていなければ削除します。
「データ」タブ→「ブックのリンク」(古いバージョンでは「リンクの編集」)を開くと、名前・グラフ・入力規則なども含めて、ブックがつながっているファイルを確認できます。外部参照を探して解除する方法もあわせて読んでください。
4. 「名前の管理」に出ない、非表示の名前
名前には「非表示」という設定があり、非表示の名前は「名前の管理」にも、名前ボックスにも表示されません。Excel の画面からは見つけられないので、VBA で一覧にします。
Option Explicit
' 「名前の管理」に出てこない非表示の名前を、新しいシートに一覧にする
Sub ListHiddenNames()
Dim n As Name, ws As Worksheet, r As Long
Set ws = ActiveWorkbook.Worksheets.Add
ws.Range("A1:C1").Value = Array("名前", "参照範囲", "Excel が使う名前")
r = 2
For Each n In ActiveWorkbook.Names
If Not n.Visible Then
ws.Cells(r, 1).Value = n.Name
ws.Cells(r, 2).Value = "'" & n.RefersTo ' 数式として計算させない
If IsSystemName(n.Name) Then ws.Cells(r, 3).Value = "はい(触らない)"
r = r + 1
End If
Next n
ws.Columns("A:C").AutoFit
MsgBox "非表示の名前:" & (r - 2) & " 個", vbInformation
End Sub
' 一覧を確認したあとで実行:Excel が使う名前以外を「名前の管理」に表示する
Sub ShowHiddenNames()
Dim n As Name, k As Long
For Each n In ActiveWorkbook.Names
If Not n.Visible And Not IsSystemName(n.Name) Then
n.Visible = True
k = k + 1
End If
Next n
MsgBox k & " 個の名前を表示しました。" & vbCrLf & _
"「数式」→「名前の管理」で確認して、不要なものを削除してください。", vbInformation
End Sub
' Excel が自動で作る名前(新しい関数・フィルター・印刷範囲など)は対象外にする
Private Function IsSystemName(ByVal nm As String) As Boolean
IsSystemName = InStr(nm, "_xlfn.") > 0 Or InStr(nm, "_xlpm.") > 0 _
Or InStr(nm, "_FilterDatabase") > 0 Or InStr(nm, "_xlnm.") > 0
End Function使い方
- 実行する前にブックを保存します(マクロで変えた内容は Ctrl+Z で戻せません)。
- Alt+F11→「挿入」→「標準モジュール」にコードを貼り付けます。
- Alt+F8 で ListHiddenNames を実行し、新しいシートの一覧を確認します。
- 消したい名前があれば ShowHiddenNames を実行し、「名前の管理」で確認しながら削除します。
- 最後に、一覧を作ったシートを削除して保存します。
注意:C列に「はい(触らない)」と出た名前は、Excel が新しい関数やフィルター、印刷範囲のために自動で作るものです。削除しないでください。そのほかの名前も、数式で使われていないか(「名前の管理」で選んで参照範囲を確認するなど)確かめてから削除します。
5. たまらないようにするには
- ほかのブックからシートをまるごとコピーしない。必要な表だけをコピーして、値や書式で貼り付ける
- シートのコピーで「名前 '〇〇' は既に存在します」が何度も出るときは、コピー元のブックの不要な名前を先に整理してからコピーする
- テンプレートを作るときに、一度ここまでの整理をしておく
毎回の確認を、ボタン1つに
KoreDefo は、「名前の管理」に表示されない非表示の名前定義を見つけて、ブックに残っていることを知らせます。名前の定義に残った外部リンクは対象外なので、[データ]→[ブックのリンク]で確認してください。作成者の名前やフィルターのかけっぱなしなど、社外に出す前に気にしたい項目も、ボタン1つで確認できます。
30日間無料で試すチェック項目の一覧を見る