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

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(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