“名前”なんていうお題をもらいました。例によって“名前”関連マクロを紹介します。
名前関連では何と言ってもCallByNameが秀逸です。
普通のVBAでは、プロパティとかメソッドはピリオドで修飾して使用しますが、
CallByNameを使えば、関数として使用できるのです。
サンプルをみてください。
Sub 名前を使う()
MsgBox ("現在のシート名:" & CallByName(ActiveSheet, "NAME", VbGet))
CallByName ActiveSheet, "NAME", VbLet, "TEST2"
Cells(2, 2).Name = "指定セル"
CallByName Evaluate("指定セル"), "SELECT", VbMethod
Dim RNG As Range
Set RNG = CallByName(Evaluate("指定セル"), "OFFSET", VbGet, 1, 1)
MsgBox Evaluate("指定セル").Address & vbNewLine & RNG.Address
Names(1).Delete
End Sub
はじめの行のCallByName(ActiveSheet, "NAME", VbGet))は
ActiveSheetのnameプロパティの内容を取得します。
普通に書くと
ActiveSheet.Name
となります。
ちょっとまどろっこしい書き方ですが、かなり融通が利きますね。
次の CallByName ActiveSheet, "NAME", VbLet, "TEST2" は
普通に書くと
ActiveSheet.Name = "TEST2"
となります。
Cells(2, 2).Name = "指定セル" というのはセル(2,2)に名前をつけるコードです。
CallByName Evaluate("指定セル"), "SELECT", VbMethod のなかで
名前の実態を指定するためにEvaluateを使用しています。これを普通に書くと
Evaluate("指定セル").Selectとなります。
このようにCallByNameはメソッドとしても使用できます。
次の CallByName(Evaluate("指定セル"), "OFFSET", VbGet, 1, 1) は
普通に書くと
Evaluate("指定セル").Offset(1,1)
となりますが、引数を指定することも可能です。
なんかダイナミックに使用できそうですね。
最後のNames(1).Deleteは後片付けです。
セル(2,2)に付けた“指定セル”という名前を削除します。