皆さんは、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 | プロパティ名 | 意味 |
---|---|---|
1 | Name | 名前として使用する文字列を指定 |
2 | RefersTo | A1、B3などのセルのアドレスで名前の参照先を指定 |
3 | RefersToR1C1 | R1C1 形式の表記法を使用して、名前の参照先を指定 |
4 | Visible | 名前を表示/非表示をTrue/Falseで指定。規定値はTrue |
5 | MacroType | マクロの種類を以下から指定。 1:Functionプロシージャ 2:Subプロシージャ 3:なし(定義した名前がFunction、Subを参照しない) |
たとえば、次のようにシートレベルで名前の定義を設定することができます。
サンプルコード:
Sub Test2() Worksheets("Sheet1").Names.Add "Addメソッドを使った名前", Range("A3:C7"), True, 3 End Sub
設定した名前の定義の場所:
このように、簡単に範囲を指定して名前の定義を設定することができます。
ブックレベル・シートレベルを使い分けることができるので、便利ですね。