Excelでのセル範囲の名前の設定と削除

セルはA1形式やR1C1形式での座標で表されますが、それとは別に、セル範囲に「名前」を付けて座標の変わりに使うことができます。

Excelでの名前を付ける手順は、名前を付けたいセル範囲を選択して、数式バーの左にある「名前ボックス」に任意の名前を入力します。

名前を削除したい場合は、数式タブ→定義された名前→名前の管理をクリックすると、名前の管理ダイアログが表示されるので、対象の名前を選択→削除ボタン、となります。

以降ではVBAで同じ操作を行う方法を紹介します。

名前の設定

RangeオブジェクトのNameプロパティは、Rangeオブジェクトに指定したセル範囲の名前の取得や設定を行うことができます。

ここで付けた名前を利用することで、セル範囲を参照する際にA1などのセルを指定せずに名前で指定することが可能になります。

名前の設定にはNameプロパティをそのまま使う方法と、NamesコレクションにAddメソッドで追加する方法の2通りがあります。どちらでも構いません。

名前の設定と参照の構文

参照時

設定時

 

Nameプロパティのサンプルコード

4行目と6行目は同じ結果になります。書き方がNameプロパティでの設定か、Namesコレクションに対してAddメソッドで追加する設定かの違いです。どちらで書いても構いません。

マクロ実行前

マクロ実行後

NameプロパティとNamesコレクションの違い

Nameプロパティで名前を付けると、その名前はブックのNamesコレクションに追加されます。そのため、違うシートの名前もNamesコレクションにまとめられます。Excelではこのように表示されます。

画像の「商品小計」などの名前のそれぞれが別シートのNameプロパティで作成されたNameオブジェクトの1つで、それらをまとめて表示している名前の管理ダイアログがNamesコレクションになります。

このNameプロパティとNamesコレクションの違いはコードを書く際に認識しておく必要があります。

Namesコレクションの名前の参照

Nameプロパティで名前の設定を行うと、Namesコレクションに追加されますが、その追加されるものはNameオブジェクトになります。ややこしいですね。

Namesコレクションには名前の管理ダイアログで表示される順でNameオブジェクトが格納されています。追加順ではありません。

Namesコレクションから名前を参照する構文

 

Namesコレクションから名前を取得するサンプルコード

最初に設定した名前を取得する場合は以下のように「Names(インデックス).Name」と書きます。

実行結果
B3の名前

名前の編集

一度付けた名前はあとで変更することができます。

再度Nameプロパティを付け直せば変更されます。その際にセル範囲も変更することができます。

以下のコードは、最初にB5セルに名前を付けて、そのあとにセル範囲を変更し、最後に名前を変更します。

 

名前の削除

名前の削除はDeleteメソッドを使用します。

以下のコードはいったん作成した名前をあとで削除しています。

 

ブックの全ての名前を削除

人からもらったブックなどに多いのですが、全然使われていない名前が残っていて邪魔だったりすることがあります。

そのような場合に一括でブックの名前を全て削除するには以下のように書きます。

Namesコレクションを全部ループして、各Nameオブジェクトを削除します。