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を使います。
マクロの中で、処理の対象となる重要なセル範囲に予め名前を付けておくことで、コードが読みやすくなり、後からのメンテナンス性も向上します。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
