名前の定義が邪魔

セルには「A1」などの座標がありますが、セル範囲に名前を付けて座標の別名として扱うことが出来るようになります。これが「名前の定義」です。

うまく使えば便利な機能ですが、複数の人が扱うブックに名前の定義を設定するのは避けた方がよいでしょう。

複数の人が扱うブックであれば通常はファイルサーバに置いてあると思いますが、ファイルサーバのどこかの参照先を指して名前の定義をしていると、その参照先が月日が経つことで存在しなくなることが多々あります。

名前の定義の値が「#REF!」になっていて参照先が存在しない場合や、ファイルパスが見たことも内容な場所を示していたりとか。年月を経てこの状況になっているため、これらの解決手段はほとんどの場合まず無いと言っていいでしょう。

そうなるともう悲惨です。

シートをコピーする度に「既にある名前が含まれています」エラーダイアログが多発し、エラーの数だけOKボタンを連打する羽目になります。イライラMAXです。

これが嫌いなので私は名前の定義は使いません。自分だけしか使わないブックであってもです。

以下ではこのような不要な名前の定義を一括削除するマクロを紹介します。

アクティブブックの名前の定義を一括削除するコード

以下の関数を実行するとアクティブブックに定義されている名前の定義を一括削除します

一括削除しますが、「Print_Area」と「Print_Titles」の2つは削除しないようにしています

Excelには自動で名前の定義を設定するものが2つあります。それが印刷範囲を示す「Print_Area」と、印刷タイトルを示す「Print_Titles」です。

この2つは定義自体は自動設定されるため、参照先が不正になることはまずありません。また、印刷範囲は個別に調整しているがよくあるため、削除してしまうと印刷範囲の設定が消えることになります。

そのため、この2つは削除はしないようにしています。

コード説明

大体コメントに書いていますが、少し補足します。

コード内ではエラー処理をしています。その理由は、名前の定義の削除を行うDeleteメソッドでは消せない定義があった場合の措置です。

名前の定義の「名前」に制御文字が含まれているとDeleteメソッドがエラーになります。この場合はVBAでは消せないため、手で「名前の管理」ダイアログ(リボン→数式→定義された名前→名前の管理)から対象行を選択して削除する必要があります。

そのため、そのようなエラーが発生した場合はイミディエイトウィンドウとメッセージボックスでその名前を表示して、手で消すことを促すようにしています。