📊 Excel VBA Top100
🔧

ListNamedRanges

ユーティリティ

ブック内の名前定義(Named Ranges)をすべて一覧表示する

Excelブック内に定義された全名前付き範囲の一覧をVBAで出力するマクロです。Namesコレクションをループして各名前の名称・参照範囲・スコープ(ブックレベル/シートレベル)などを新規シートに書き出します。数式内で使われている名前定義の把握や、不要な名前の特定・削除の前調査として活用できます。参照先が壊れた(#REF!)名前の検出にも使えます。内部ではNamesコレクションをループし、Name.RefersToで参照範囲の文字列を、Name.NameLocalでローカライズ名を取得しています。ClearAllNamedRangesの実行前に本マクロで現状を記録しておくことで、削除内容を後から検証できる安全な運用フローが完成します。名前の管理ダイアログを開いて1件ずつ確認するより、はるかに短時間で全体を把握できます。

ListNamedRanges デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると名前定義の一覧がアクティブシートに出力される

🎯 活用シーン

  • ✓複雑なブックの名前付き範囲を一覧化して数式の把握を容易化
  • ✓ファイル統合後に重複した名前付き範囲をリストアップして整理
  • ✓エラー参照(#REF!)の名前付き範囲を検出して修正または削除
  • ✓複数人が長期間編集してきたブックで、意図せず重複・衝突している名前付き範囲を洗い出したいとき
  • ✓ファイル統合作業の前に、統合対象双方の名前付き範囲を比較して競合を事前に把握したいとき

💡 実装のヒント

  • ▸Name.RefersTo で参照範囲を文字列で取得できます
  • ▸Name.NameLocal でローカライズされた名前を取得できます
  • ▸InStr(Name.RefersTo, "#REF!")でエラー参照を持つ名前を特定できます
  • ▸同名だがスコープ(ブックレベル/シートレベル)が異なる名前が混在している場合、一覧にスコープ列を追加して区別できるようにしてください。
  • ▸#REF!エラーを含む名前はInStr関数で機械的に検出でき、クリーンアップ対象の自動抽出に応用できます。

💻 VBAコード

' ListNamedRanges
' -----------------
' Macro Name: ListNamedRanges
' Description: ブック内の名前定義(Named Ranges)をすべて一覧表示する
' Parameters: なし
' Returns: なし
' Usage: 実行すると名前定義の一覧がアクティブシートに出力される
' -----------------

Sub ListNamedRanges()
    Dim wb As Workbook
    Dim nm As Name
    Dim ws As Worksheet
    Dim outputRow As Long
    Dim lastRow As Long

    On Error GoTo ErrorHandler

    Set wb = ActiveWorkbook

    If wb.Names.Count = 0 Then
        MsgBox "名前定義は存在しません。", vbInformation
        Exit Sub
    End If

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    If lastRow < 1 Then lastRow = 1

    outputRow = lastRow + 2

    ws.Cells(outputRow, 1).Value = "名前定義一覧"
    ws.Cells(outputRow, 1).Font.Bold = True
    ws.Cells(outputRow, 1).Font.Size = 14
    outputRow = outputRow + 1

    ws.Cells(outputRow, 1).Value = "名前"
    ws.Cells(outputRow, 2).Value = "参照範囲"
    ws.Cells(outputRow, 3).Value = "スコープ"
    ws.Cells(outputRow, 1).Font.Bold = True
    ws.Cells(outputRow, 2).Font.Bold = True
    ws.Cells(outputRow, 3).Font.Bold = True
    ws.Range(ws.Cells(outputRow, 1), ws.Cells(outputRow, 3)).Interior.Color = RGB(200, 200, 200)
    outputRow = outputRow + 1

    For Each nm In wb.Names
        ws.Cells(outputRow, 1).Value = nm.Name
        ws.Cells(outputRow, 2).Value = nm.RefersTo
        If nm.WorkbookParameter Then
            ws.Cells(outputRow, 3).Value = "ブック"
        Else
            ws.Cells(outputRow, 3).Value = "シート"
        End If
        outputRow = outputRow + 1
    Next nm

    ws.Columns("A:C").AutoFit
    MsgBox "名前定義を " & wb.Names.Count & " 件出力しました。", vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub