こんにちは、Ryoです。
Excelの機能に名前定義がありますが、これは複数/単一のセル範囲に名前を設定することで参照しやすくなるものなので利用することも多い反面、削除したいことも多いのではないかと思います。今回はその名前の削除やブック内全ての名前を対象に削除する方法などを書いていきます。
1.サンプル概要
サンプルとして「Sheet2」に以下の表を作成し、範囲名を5つ設定しています。
設定したセル範囲名(名前)を確認するには、「数式」タブの「名前の管理」を選択すれば、画像の通り一覧が表示されます。
設定したセル範囲名は「サンプルタイトル」「サンプル数量」「サンプル日付」「サンプル品番」「サンプル領域」の5つになります。
これらの範囲名に対する削除などについて、以下にサンプルコードを交えて書いていきます。
2.サンプルコード
◆範囲名を指定し削除する(ブックのセル範囲名対象)
サンプルとして設定した範囲名の「サンプル領域」を削除する場合、このような記述になります。
Sub sample1() 'ブックのセル範囲を対象として削除する 'セル範囲名「サンプル領域」を削除 ThisWorkbook.Names("サンプル領域").Delete End Sub
削除する場合はDeleteメソッドを使用して、オブジェクトにNameオブジェクトを指定することで指定したセル範囲名を削除することができます。
構文:オブジェクト.Delete
このコードを実行することで、指定した「サンプル領域」が削除されています。
◆Sheetを範囲とした名前を削除
ちなみに「ワークシートを範囲とした名前」が設定されている場合は、対象のワークシートを以下のように指定します。
「ワークシートを範囲とした名前」とは以下のような場合です。
この場合は「Sheet5」に設定されているので、シートと名前を指定して削除します。
Sub sample2() 'ワークシートを範囲とした名前を削除する Worksheets("Sheet5").Names("シート領域サンプル").Delete End Sub
実行結果は以下の通り、削除されています。
◆ブック内に定義された全ての名前を削除
次に対象ブックの全てのセル範囲名を削除したい場合について書いていきます。
Sub sample3() 'ブック内に定義された全ての名前を削除する Dim samp As Name 'ブック内全てのセル範囲名に対し処理を実行 For Each samp In ThisWorkbook.Names 'セル範囲名の削除 samp.Delete Next End Sub
削除を行う上でDeleteメソッドを使用するのは同様ですが、ブック内全てのセル範囲名に対して処理を行いますので、For Each~Nextを使用します。
このFor Each処理の詳細について、ここでは触れませんが以前に記事を作成していますので宜しければご参照ください。
処理の実行結果としては以下の通り、すべて削除されています。
私の環境では「シートを範囲とした名前」も含めて削除されていますので、Sheet範囲も含めてブック全体の範囲名が削除されるようです。
対象ブックの全てのセル範囲名を削除しようとする場合は、このようにループ処理を利用して個々のセル範囲名を削除する必要があります。
3.まとめ
冒頭にも書いていますが、名前定義というものは上手く勝つようするととても便利なものです。
その反面、使い過ぎてしまうと作成者以外の他ユーザーに優しくないと言いますか、とても使い難いものにもなりますので注意が必要です。今回のサンプルはリセットしたい時などに全て消し去ることができるので、機会があればご検討くださいませ。
以上、セル範囲の名前を削除する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo