【Excel VBA】セル範囲に名前を定義・削除する3つの方法

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 を使います。

マクロの中で、処理の対象となる重要なセル範囲に予め名前を付けておくことで、コードが読みやすくなり、後からのメンテナンス性も向上します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次