【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として約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

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

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