KoreDefo > お役立ち記事

Excelの「名前の定義」を整理する方法

シートをコピーしたときに「名前 '〇〇' は既に存在します」と何度も聞かれる。それは、ブックに不要な名前の定義がたまっているしるしです。見えるものから、見えないものまで整理しましょう。

更新日:2026年10月28日

1. 名前がたまる理由と困ること

名前の定義は、シートをほかのブックからコピーしたときに一緒に持ち込まれます。くり返すうちに、次のような名前がたまっていきます。

シートのコピーで「名前 '〇〇' は既に存在します」と何度も聞かれるのも、これが原因です。

2. 「名前の管理」でエラーの名前を消す

  1. 「数式」タブ→「名前の管理」(Ctrl+F3)を開きます。
  2. 右上の「フィルター」→「エラーのある名前」を選びます。
  3. 表示された名前を、Shift を押しながらクリックしてまとめて選び、「削除」を押します。

参照範囲が #REF! の名前は、どこからも使えない名前なので、消しても計算は変わりません。

3. ほかのファイルを指す名前を探す

  1. 「名前の管理」で、「参照範囲」の列見出しをクリックして並べ替えます。
  2. 参照範囲に [ファイル名.xlsx] や .xls が入っている名前が、ほかのファイルを指している名前です。
  3. 使っていなければ削除します。

「データ」タブ→「ブックのリンク」(古いバージョンでは「リンクの編集」)を開くと、名前・グラフ・入力規則なども含めて、ブックがつながっているファイルを確認できます。外部参照を探して解除する方法もあわせて読んでください。

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

使い方

  1. 実行する前にブックを保存します(マクロで変えた内容は Ctrl+Z で戻せません)。
  2. Alt+F11→「挿入」→「標準モジュール」にコードを貼り付けます。
  3. Alt+F8 で ListHiddenNames を実行し、新しいシートの一覧を確認します。
  4. 消したい名前があれば ShowHiddenNames を実行し、「名前の管理」で確認しながら削除します。
  5. 最後に、一覧を作ったシートを削除して保存します。
注意:C列に「はい(触らない)」と出た名前は、Excel が新しい関数やフィルター、印刷範囲のために自動で作るものです。削除しないでください。そのほかの名前も、数式で使われていないか(「名前の管理」で選んで参照範囲を確認するなど)確かめてから削除します。

5. たまらないようにするには

毎回の確認を、ボタン1つに

KoreDefo は、「名前の管理」に表示されない非表示の名前定義を見つけて、ブックに残っていることを知らせます。名前の定義に残った外部リンクは対象外なので、[データ]→[ブックのリンク]で確認してください。作成者の名前やフィルターのかけっぱなしなど、社外に出す前に気にしたい項目も、ボタン1つで確認できます。

30日間無料で試すチェック項目の一覧を見る