category name  »  page title date

配列を定数に

配列を定数に設定したいことがよくあります。かなり、よくあります。

Private Const names = Array("aaa", "bbb", 555)  '--------- ※

といった具合にできれば楽なのですが、VBAではエラーになってしまいます。
どうすればよいか? たとえば、こんなのはどうでしょうか?

Private Const namesStr = "aaa, bbb,555"
Private Property Get names()
      names = Split(namesStr, ",")
End Property

こうしておくと、他の場所からは

a = names(1)         '--------- 結果は a = " bbb"

というように参照することができ、※で定数で宣言したのと同じように扱うことができます。
使うときには、念を入れて

a = Trim(names(1))       '--------- 結果は a = "bbb"

という風にしておくと、namesStr の中の "," の前後にうっかり空白が残っていても安心です。
また、結果を数値として受け取りたい場合には、こうします。

a = CInt(names(2))       '--------- 結果は a = 555

定数ですから、後で names に変更を加えることはできません。names は配列なので、普通に Lbound(names) とか配列一般の処理ができます。まるで、配列を定数化したと思って扱えます。
残念なのは、あくまで文字列が基本なので、オブジェクトや列挙型などを入れたい場合には工夫が必要となる点です。