セルに名前を定義する(NamesコレクションのAddメソッド)|Excel VBA |
セルまたはセル範囲には、任意の名前を定義できます。
セルに定義した名前はNameオブジェクトで管理され、Nameオブジェクトの集合がNamesコレクションです。
セルに名前を定義するには、NamesコレクションのAddメソッドを使います。
次のサンプルは、セルA1に"Sample"という名前を定義します。
Sub Sample1()
Names.Add Name:="Sample", RefersTo:="=$A$1"
End Sub
Addメソッドの引数Nameには、定義する名前を指定します。
引数RefersToには、名前を定義するセルを指定します。
このとき、セルのアドレスを相対参照で指定すると、アクティブセルから見た相対的な位置にあるセルに名前が定義されます。
たとえば次のサンプルを実行すると、アクティブセルを基点(A1)として見たときのセルB3(2行下で1列右)に名前"Sample2"を定義します。
Sub Sample2()
Names.Add Name:="Sample2", RefersTo:="=B3"
End Sub
定義した名前を使ってセルを操作するときは、Rangeプロパティでアドレスを指定する代わりに名前を指定します。
Sub Sample3()
Range("Sample").Value = "モーグ"
Range("Sample").Interior.ColorIndex = 3
End Sub
位置に規則性のない、非連続の複数セルを何度も操作するときは、一時的に名前を定義すると、コードを簡素化できます。
Sub Sample4()
Dim c As Range
Names.Add Name:="Target", _
RefersTo:="=$A$3,$C$5,$B$4,$E$6"
For Each c In Range("Target")
If c.Value > 500 Then
c.Font.ColorIndex = 3
End If
Next c
Names("Target").Delete
End Sub
上のSample4では、名前を定義したセルを一度しか使っていないので
For Each c In Range("$A$3,$C$5,$B$4,$E$6")
と書いても同じですが、定義した名前は記憶されるので、名前を削除するまで別のプロシージャから同じセルを操作するときにも同じ名前を使えます。