🔧
ClearAllNamedRanges
ユーティリティブック内のすべての名前定義を削除する
ブック内に定義されたすべての名前付き範囲をVBAで一括削除するマクロです。Names コレクションをループしてDelete メソッドを呼び出すことで、不要になった名前定義をクリーンアップします。古いファイルに蓄積した不使用の名前や、参照先が存在しなくなったエラー名前(#REF!)の削除に特に有効です。削除前に名前一覧を記録するバックアップ処理を組み合わせると安全です。内部ではNamesコレクションを末尾からループしてDeleteメソッドを呼び出しており、先頭から削除すると添字がずれてスキップが発生する問題を回避しています。ListNamedRangesで事前に一覧を出力してからこのマクロを実行すれば、削除内容を記録に残した安全なクリーンアップ作業になります。名前の管理ダイアログを1件ずつ操作する手間を完全に省ける点が大きな利点です。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとすべての名前定義が削除される(確認ダイアログ付き)
🎯 活用シーン
- ✓他ブックからコピーしたシートに付いてきた不要な名前付き範囲の削除
- ✓ファイル引継ぎ前のクリーンアップで#REF!エラーの名前を一括削除
- ✓VBA開発中に作成したテスト用名前定義をまとめて解除
- ✓他社ブックからシートをコピーした際に大量に持ち込まれた不要な名前定義を、まとめて掃除したいとき
- ✓長期間の改修で蓄積した#REF!エラーの名前付き範囲を一掃し、ファイルの健全性を回復したいとき
💡 実装のヒント
- ▸コレクションをループ中に削除する場合は逆順(末尾から)が安全です
- ▸Name.RefersTo で参照先を確認してから削除するか判断できます
- ▸エラー参照の名前だけ削除したい場合はInStr(RefersTo, "#REF!")で判定できます
- ▸ブックレベルとシートレベルの名前は削除方法がわずかに異なるため、Name.Parentプロパティでスコープを確認してから処理してください。
- ▸数式内で参照されている名前を誤って削除すると#NAME?エラーが発生するため、事前にCheckDependenciesで参照状況を確認すると安全です。
💻 VBAコード
' ClearAllNamedRanges
' -----------------
' Macro Name: ClearAllNamedRanges
' Description: ブック内のすべての名前定義を削除する
' Parameters: なし
' Returns: なし
' Usage: 実行するとすべての名前定義が削除される(確認ダイアログ付き)
' -----------------
Sub ClearAllNamedRanges()
Dim wb As Workbook
Dim nm As Name
Dim countDeleted As Long
Dim nmNames() As String
Dim i As Long
On Error GoTo ErrorHandler
Set wb = ActiveWorkbook
If wb.Names.Count = 0 Then
MsgBox "名前定義は存在しません。", vbInformation
Exit Sub
End If
If MsgBox("すべての名前定義 (" & wb.Names.Count & "件) を削除しますか?" & vbCrLf & "この操作は元に戻せません。", _
vbYesNo + vbExclamation, "名前定義全削除") = vbNo Then
Exit Sub
End If
ReDim nmNames(1 To wb.Names.Count)
i = 1
For Each nm In wb.Names
nmNames(i) = nm.Name
i = i + 1
Next nm
countDeleted = 0
For i = 1 To UBound(nmNames)
On Error Resume Next
wb.Names(nmNames(i)).Delete
If Err.Number = 0 Then
countDeleted = countDeleted + 1
End If
On Error GoTo ErrorHandler
Next i
MsgBox countDeleted & " 件の名前定義を削除しました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub