【VBA入門】名前の定義を設定・使用・削除する方法について徹底解説!

皆さんは、VBAで名前の定義を設定して使う方法を知っていますか?

セル範囲を直接せず名前の定義を使って処理を作ることで、行・列を追加して位置がずれた場合にも対応できる、変化に強いVBAのコードを作っていくことができるので、使い方を覚えておくと便利です!

そこで今回は、

・VBAで名前の定義を設定する方法

といった基礎的なことから、

・シート・ブックの名前の定義の違いについて

・VBAで名前の定義を使って処理を作る方法

・VBAで設定した名前の定義を削除する方法

といった応用的な方法まで、徹底的に解説します!

目次

VBAで名前の定義を設定する方法

VBAで名前の定義を設定する方法は、大きく分けて以下の2つがあります。


・ブックレベルで名前の定義を設定
・シートレベルで名前の定義を設定

それぞれ詳しく解説する前に、簡単に「ブックレベル・シートレベルの名前の定義の違い」について解説しますね。

ブックレベル・シートレベルの名前の定義の違い

ブックレベル・シートレベルと聞くと少し難しく感じるかもしれませんが、簡単に言うと次のような違いがあります。

・ブックレベル:シート名の指定なしでどこからでも使える
・シートレベル:シート名の指定をしなければ使えない

変数でいうところのPublic、Privateなどのスコープの違いに似ているかもしれませんね。

ブックレベルはどこからでもつかえるので使いやすい分、意図しない場所で書き換えられてしまうリスクもあるので、その点を踏まえたうえで使いやすい方を使うのがおすすめです!

では次に、具体的な設定方法について解説します。

ブックレベルで名前の定義を設定する方法

まず、「ブックレベルで名前の定義を設定する方法」についてです。

Nameプロパティを使うことで、ブックレベルで名前の定義を付けることができます。

使い方は次のとおりです。

Nameプロパティの使い方:

Range("セル範囲").Name = "名前の定義に設定する名前"

たとえば、次のように名前の定義を設定することができます。

サンプルコード:

Sub Test()
    Range("A1:C2").Name = "Nameプロパティを使った名前"
End Sub

設定した名前の定義の場所:

このように、簡単に範囲を指定して名前の定義を設定することができます。

シートレベルで名前の定義を設定する方法

次に、「シートレベルで名前の定義を設定する方法」についてです。

NamesコレクションのAddメソッドを使えば、ブックシートレベル・シートレベルのどちらかを指定して、名前の定義を設定することができます。

使い方は次のとおりです。

NamesコレクションのAddメソッドの使い方:

'ブックレベルで設定
Application.Names.Add [Name ,RefersTo ,RefersToR1C1 ,Visible ,MacroType]                       

'シートレベルで設定
Worksheets(“シート名”).Names.Add [Name ,RefersTo ,RefersToR1C1 ,Visible ,MacroType]

各プロパティの使い方を簡単に一覧でまとめました。

Noプロパティ名意味
1Name名前として使用する文字列を指定
2RefersToA1、B3などのセルのアドレスで名前の参照先を指定
3RefersToR1C1R1C1 形式の表記法を使用して、名前の参照先を指定
4Visible名前を表示/非表示をTrue/Falseで指定。規定値はTrue
5MacroTypeマクロの種類を以下から指定。
1:Functionプロシージャ
2:Subプロシージャ
3:なし(定義した名前がFunction、Subを参照しない)

たとえば、次のようにシートレベルで名前の定義を設定することができます。

サンプルコード:

Sub Test2()
    Worksheets("Sheet1").Names.Add "Addメソッドを使った名前", Range("A3:C7"), True, 3
End Sub

設定した名前の定義の場所:

このように、簡単に範囲を指定して名前の定義を設定することができます。

ブックレベル・シートレベルを使い分けることができるので、便利ですね。

VBAで名前の定義を設定したセルを使用する方法

次に、VBAで設定した名前の定義を使う方法について解説します。

わかりやすく解説するために、さきほど用意した名前の定義を設定するサンプルコードを使って、それぞれ解説します。

ブックレベルの名前の定義を使用する方法

まず、「ブックレベルの名前の定義を使う方法」についてです。

以下のようにRangeメソッドの範囲に直接「名前の定義で設定した名前」を使って処理を書くだけなので、とても簡単です。

サンプルコード:

Sub Test3()
    Range("A1:C2").Name = "Nameプロパティを使った名前"
    
    Range("Nameプロパティを使った名前").Value = 1
End Sub

設定した名前の定義の場所:

こちらは、設定した名前の定義の範囲に「1」を書き込むサンプルです。

このように、簡単に名前の定義を使って処理を書くことができます。

シートレベルの名前の定義を使用する場合

シートレベルの名前の定義を使うためには、シート名を指定してから「名前の定義で設定した名前」を指定しないといけません。

「Worksheets(“シート名”).Range(“名前の定義で設定した名前”).メソッド」のように書くことで、名前の定義を使った処理を書くことができます。

サンプルコード:

Sub Test4()
    Worksheets("Sheet1").Names.Add "Addメソッドを使った名前", Range("A3:C7"), True, 3

    Worksheets("Sheet1").Range("Addメソッドを使った名前").Value = 5

End Sub

設定した名前の定義の場所:

ちなみに、シート名を指定せずにRangeメソッドを使った場合は「Activesheet」がRangeメソッドの前に暗黙的に指定されるため、名前の定義を設定したシートであれば、「Range(“名前の定義で設定した名前”).メソッド」でもエラーにはなりません。

ただ、別のシートで処理を実行した場合は、次のようにエラーメッセージが出てしまいます。

エラーメッセージを出さないためにも、「Worksheets(“シート名”).Range(“名前の定義で設定した名前”).メソッド」のようにシートを指定して処理を作る癖をつけるのがおすすめです!

※ちなみに、Activesheetって何?と思った方は、以下記事を見てみてくださいね!

VBAで設定した名前の定義を削除する方法

最後に、VBAで設定した名前の定義を削除する方法について解説します。

ブックレベル・シートレベルどちらも、NamesコレクションのItemメソッドを使って削除します。

使い方は次のとおりです。

NamesコレクションのItemメソッドの使い方:

'ブックレベルの名前の定義を削除
Application.Names.Item("名前の定義に設定した名前").Delete

'シートレベルの名前の定義を削除
ActiveSheet.Names.Item("名前の定義に設定した名前").Delete

Applicationを先頭のオブジェクトに指定した場合はブックレベル、ActiveSheetまたはWorksheets(“シート名”)を指定した場合はシートレベルになるわけです。

たとえば、次のように設定した名前の定義を削除することができます。

削除前の名前の定義:

サンプルコード:

Sub Test5()

    'ブックレベルの名前の定義を削除
    Application.Names.Item("Nameプロパティを使った名前").Delete
    
    'シートレベルの名前の定義を削除
    ActiveSheet.Names.Item("Addメソッドを使った名前").Delete

End Sub

削除後の名前の定義:

このように、簡単に作成した名前の定義を削除することができます。

まとめ

今回は、VBAで名前の定義を設定・使用・削除する方法について解説しました。

名前の定義を使いこなすと、変更に強いVBAの処理を作ることができるので、覚えておくと便利です。

使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次