VBAサンプル集
名前定義の一覧と削除(Name)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2013年5月以前 最終更新日:2019-10-27

名前定義の一覧と削除(Name)


名前定義は使い方によっては、とても便利な機能ですが、
長く使っているブックでは、とても多くの名前定義が入ってしまっていたり、
参照エラーを起こしている名前定義が多数あったりと、管理に困る場合も多々出てきます。


これらが発生する原因としては、
ブック間のシートコピーで増えていってしまったり、
シートおよびセルの削除によって参照エラーになったままにしておくことで、
後々に見た時に何の名前定義かさえも分からなくなってしまったりします。

名前定義の一覧を取得し、シートに書き出すマクロVBA

Sub sample()
  Dim nm As Name
  Dim i As Long
  i = 1
  For Each nm In ActiveWorkbook.Names
    Cells(i, 1) = nm.Name
    Cells(i, 2) = "'" & nm.Value
    Cells(i, 3) = nm.Parent.Name
    i = i + 1
  Next
End Sub

Cells(i, 1) = nm.Name
名前定義の名前です。

Cells(i, 2) = "'" & nm.Value
名前定義の参照範囲です。
.Valueは.RefersToや.RefersToR1C1等でも良いです。

Cells(i, 3) = nm.Parent.Name
範囲がブックと、シートがありますので、
親オブジェクトを出力しています。
名前の範囲がブックの場合はブック名、シート範囲の場合はシート名が出力されます。

非表示の名前定義を表示

Sub sample2()
  Dim nm As Name
  For Each nm In ActiveWorkbook.Names
    nm.Visible = True
  Next
End Sub

nm.Visible = True
これで表示しています。
このVBAでは、元が表示/非表示に関わらず全て表示にしています。

名前定義を削除する

Sub sample3()
  Dim nm As Name
  On Error Resume Next
  For Each nm In ActiveWorkbook.Names
    nm.Delete
  Next
  On Error GoTo 0
End Sub

古くから引き継いでいるブック等では、削除できない名前定義が存在していることが多々あります。
その時には、エラーになってしまう為、
On Error Resume Next
これで、エラーを無視するようにしています。
VBAで削除できずに残ってしまう名前定義は、先の非表示の名前定義を表示を実行してから、エクセルの名前の管理で削除してみてください。

全てではなく、参照エラーとなっている名前定義だけ削除する場合は、

Sub sample4()
  Dim nm As Name
  On Error Resume Next
  For Each nm In ActiveWorkbook.Names
    If nm.Value Like "*[#]REF!*" Then
      nm.Delete
    End If
  Next
  On Error GoTo 0
End Sub

参照範囲の文字列を判定することで、他ブックを参照している名前定義だけを削除する等、いろいろなパターンに変更可能でしょう。

さらに極めてまれですが、
ブックの共有等(原因ははっきりしませんが)で、数万以上の名前定義が存在していることがあります。
そのようなブックにおいては、For Eachがエラーとなってしまい処理できない場合もあります。
このような場合は、以下のようにしてください。

Sub sample5()
  Dim i As Long
  On Error Resume Next
  For i = 1 To ActiveWorkbook.Names.Count
    ActiveWorkbook.Names(i).Delete
  Next
  On Error GoTo 0
End Sub

これでも削除できないような場合は、VBAでの対応は難しいと思われます。

サイト内の関連ページ

第92回.名前定義(Names)|VBA入門
・Namesコレクション ・Nameオブジェクト ・RangeオブジェクトのNameプロパティ ・名前定義を使ったRangeの書き方 ・シートコピー時は名前定義に注意 ・名前定義の実践例

指定セルに名前定義されているか判定する
・指定セル範囲が何らかの名前定義に含まれているか ・指定セル範囲と同一範囲の名前定義があるか ・すでに設定されている名前定義を削除してから再設定 ・マクロVBAでの名前定義について



同じテーマ「マクロVBAサンプル集」の記事

オートフィルター(AutoFilter)
日付のオートフィルタ(AutoFilter)
印刷ダイアログを使用する(xlDialogPrint)
名前定義の一覧と削除(Name)
シートを名前順に並べ替える
数式内の不要なシート名を削除する(HasFormula)
数式の参照しているセルを取得する
増殖した条件付き書式を整理統合する
条件付き書式で変更された書式を取得する
セル結合/解除でセル値を退避/回復
セル結合なんて絶対に許さないんだからね


新着記事NEW ・・・新着記事一覧を見る

セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)


アクセスランキング ・・・ ランキング一覧を見る

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ