はじめに
Excelの「名前の定義」は、特定のセル範囲に分かりやすい名前を付けて、数式などで便利に利用できる機能です。しかし、ブックのコピーを繰り返したり、多くの人によって編集されたりするうちに、不要な定義やリンク切れの定義が大量に溜まってしまうことがあります。
これらの不要な定義は、ブックの動作を不安定にしたり、ファイルの容量を肥大化させたりする原因にもなり得ます。「名前の管理」ダイアログから一つずつ削除するのは大変ですが、VBAマクロを使えば、ブック内の全ての「名前の定義」を一括でクリーンアップできます。
この記事では、そのためのシンプルなVBAコードと、実行する上での重要な注意点を解説します。
⚠️ 重要:実行する前の注意 このマクロを実行すると、ブックに登録されている全ての「名前の定義」が削除されます。 VLOOKUP関数やINDIRECT関数などで利用している重要な名前も消えてしまい、数式が #NAME?
エラーになる危険性があります。実行する前には、必ずファイルのバックアップを取るか、削除しても問題ないことが確実なファイルでのみ使用してください。
全ての「名前の定義」を削除するVBAサンプルコード
このマクロは、ブック(ActiveWorkbook
)に存在する全ての名前(.Names
)をループ処理で一つずつ取得し、削除(.Delete
)していきます。
完成コード
' 現在のブックに定義されている名前を全て削除する
Sub DeleteAllDefinedNames()
'== 変数を定義します ==
Dim definedName As Name
Dim nameCount As Long
Dim userResponse As VbMsgBoxResult
' 削除前の名前の数をカウント
nameCount = ActiveWorkbook.Names.Count
If nameCount = 0 Then
MsgBox "このブックには「名前の定義」がありません。", vbInformation
Exit Sub
End If
'== ユーザーに最終確認を求めます ==
userResponse = MsgBox(nameCount & "個の「名前の定義」がブック内に存在します。" & vbCrLf & _
"これらを全て削除しますか?" & vbCrLf & _
"(この操作は元に戻せません)", _
vbExclamation + vbOKCancel, "最終確認")
'== 「OK」が押された場合のみ処理を実行します ==
If userResponse = vbOK Then
'== ブック内の全ての名前をループ処理で削除します ==
For Each definedName In ActiveWorkbook.Names
definedName.Delete
Next definedName
MsgBox "全ての「名前の定義」を削除しました。", vbInformation
Else
MsgBox "処理を中断しました。", vbInformation
End If
End Sub
コードの解説
Dim definedName As Name
Name
オブジェクトを格納するための変数 definedName
を宣言しています。Name
オブジェクトは、Excelの「名前の定義」そのものを指します。
userResponse = MsgBox(...)
前述の通り、このマクロの処理は破壊的で元に戻せないため、実行前にユーザーに最終確認を促すメッセージボックスを表示しています。安全性を高めるための重要なステップです。
For Each definedName In ActiveWorkbook.Names
このコードが処理の核心です。
For Each ... Next
構文を使い、ActiveWorkbook.Names
コレクション(現在アクティブなブックに存在する全ての「名前の定義」)から、名前を一つずつdefinedName
変数に取り出してループ処理を実行します。
definedName.Delete
For Each
ループの中で、取り出された個々の definedName
オブジェクトに対して .Delete
メソッドを実行し、名前の定義を削除しています。
まとめ
今回は、ブックに溜まった不要な「名前の定義」を一括で削除するVBAマクロをご紹介しました。
ActiveWorkbook.Names
でブック内の全ての名前を取得できる。For Each
ループと.Delete
メソッドを組み合わせて一括削除を実現する。- 実行すると重要な数式がエラーになる可能性があるため、バックアップと実行前の確認が不可欠。
意図せず肥大化したファイルや、動作が不安定になったファイルのメンテナンスに非常に役立つマクロです。リスクを十分に理解した上で、慎重に活用してください。