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

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

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

そこで今回は、

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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の処理を作ることができるので、覚えておくと便利です。

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説