「オブジェクト型の定数」的なものを設定する

オブジェクト型の定数

定数は便利な仕組みだが、オブジェクト型の定数は指定できないっぽい。

Range型の定数を定義しようとしてみる

標準モジュールの宣言セクションに、次のように書いてみる。

f:id:akashi_keirin:20180831193443j:plain

で、[Enter]を押してみると、

f:id:akashi_keirin:20180831193450j:plain

こんな風に、コンパイルエラーっぽい状態になる。ただ、エラーメッセージは出ていない。

この状態で、次のコードを実行してみる。

リスト1 標準モジュール
Public Sub testObjectTypeConstant()
  Debug.Print BASE_CELL.Value
End Sub

すると、

f:id:akashi_keirin:20180831193459j:plain

ここでコンパイルエラー。

やっぱり、Range型の定数というのは無理っぽい。

ちなみに、

Private Const Set BASE_CELL As Range = Sheet7.Range("A1")

としても駄目だった。

Propertyを使う

処理の中で基準にするセルなど、特定のRangeオブジェクトを定数みたいにしておくことができたら便利。

で、Propertyを使うことを考えた。

Sheetモジュールに次のコードを書く。

スト2 シートモジュール
Public Property Get BASE_CELL() As Range
  Set BASE_CELL = Me.Range("A1")
End Property

たったこれだけ。Sheet7BASE_CELLプロパティにA1セルを指定。あ、Sheet7の「7」に深い意味はありませんよ。テスト用ブックのワークシートが増えすぎているだけのことですので。

読み取り専用なので、定数っぽく使えると思う。

使ってみる

次のコードで実行。

リスト3 標準モジュール
Public Sub testObjectTypeConstant()
  Debug.Print Sheet7.BASE_CELL.Value
End Sub

Sheet7

f:id:akashi_keirin:20180831193506j:plain

この状態なので、当然、実行すると、

f:id:akashi_keirin:20180831193514j:plain

イミディエイトにこんな風に表示される。

おわりに

各シートのPropertyにすることで、各シートのモジュールにコードを書くことになるので、それぞれのシートの中で独特の役割を持ったセルやセル範囲を一括管理しやすくなると思う。