Excelの「名前の定義」機能を使うと、C2:D100
のようなセル範囲に「売上データ」のような分かりやすい名前を付けることができます。これにより、数式が読みやすくなったり、VBAから特定の範囲を扱いやすくなったりと、多くのメリットがあります。
VBAを使えば、この「名前の定義」を自動化できます。この記事では、セル範囲に名前を定義する2つの方法と、定義した名前を削除する方法を解説します。
1. 最も簡単な方法: Range.Name
プロパティを使う(推奨)
特定のセル範囲に名前を付けるだけであれば、対象のRange
オブジェクトの.Name
プロパティに、直接名前を代入する方法が最もシンプルで直感的です。
コードと解説
Sub DefineName_Simple()
' 変数を宣言します
Dim targetRange As Range
Dim rangeName As String
' 名前を付けたいセル範囲と、定義したい名前を設定
Set targetRange = ThisWorkbook.Worksheets("Sheet1").Range("C2:E100")
rangeName = "SalesDataTable"
' Rangeオブジェクトの.Nameプロパティに名前を代入
targetRange.Name = rangeName
MsgBox "セル範囲 " & targetRange.Address(False, False) & " に、「" & rangeName & "」という名前を定義しました。"
End Sub
この一行targetRange.Name = rangeName
だけで、指定した範囲にブックレベルの名前が定義されます。
2. 高機能な方法: Names.Add
メソッドを使う
.Names.Add
メソッドを使うと、より詳細な設定で名前を定義できます。例えば、特定のワークシート内だけで有効な(シートレベルの)名前を定義することも可能です。
コードと解説
Sub DefineName_Advanced()
' 変数を宣言します
Dim targetRange As Range
Dim rangeName As String
Set targetRange = ThisWorkbook.Worksheets("Sheet1").Range("C2:E100")
rangeName = "SalesDataTable_Advanced"
' Names.Addメソッドで名前を定義
' RefersTo引数に、対象となるRangeオブジェクトを渡します
ThisWorkbook.Names.Add Name:=rangeName, RefersTo:=targetRange
MsgBox "Names.Addメソッドで、「" & rangeName & "」という名前を定義しました。"
End Sub
コードのポイント解説
ThisWorkbook.Names.Add Name:=名前, RefersTo:=対象
Name
: 定義したい名前を文字列で指定します。RefersTo
: 名前が参照する対象を指定します。セル範囲のRange
オブジェクトを直接渡すのが最も確実です。"=Sheet1!$C$2:$E$100"
のように、文字列で指定することもできます。
ブックレベルとシートレベル
ThisWorkbook.Names.Add ...
: ブック全体で有効な名前を定義します。Worksheets("Sheet1").Names.Add ...
: 「Sheet1」の中だけで有効な名前を定義します。他のシートで同じ名前を定義することも可能になります。
3. 定義した名前を削除する方法
定義済みの名前は、Names
コレクションから名前を指定して.Delete
メソッドで削除します。
コードと解説
Sub DeleteDefinedName()
Dim nameToDelete As String
nameToDelete = "SalesDataTable"
On Error Resume Next ' 削除しようとした名前が存在しない場合のエラーを回避
' Namesコレクションから、指定した名前を削除
ThisWorkbook.Names(nameToDelete).Delete
On Error GoTo 0
MsgBox "「" & nameToDelete & "」という名前を削除しました。(存在した場合)"
End Sub
ThisWorkbook.Names("名前")
で対象の名前オブジェクトを取得し、.Delete
を実行します。名前が存在しない場合にエラーになるのを防ぐため、On Error Resume Next
でエラー処理を行うのが一般的です。
まとめ
VBAで名前付き範囲を操作する方法は、目的に応じて使い分けます。
- 特定のセル範囲に名前を付けるだけの場合: シンプルで直感的な
myRange.Name = "名前"
が最もお勧めです。 - シートレベルの名前など、より詳細な設定をしたい場合: 高機能な
Names.Add
メソッドを使います。 - 名前を削除する場合:
Names("名前").Delete
を使います。
マクロの中で、処理の対象となる重要なセル範囲に予め名前を付けておくことで、コードが読みやすくなり、後からのメンテナンス性も向上します。