Rangeプロパティの引数に定数・変数を使う(Excel)

Rangeプロパティの引数

通常、Rangeプロパティの引数と言えば、

[親オブジェクト].Range("A1")

のように、セルの番地を指定する。

しかしながら、このやり方だと、マジックナンバー的になってしまって、不便だなあと思っていた。

セルに名前を付ける、という方法もあるのだが、あまり濫発すると、

増田さんネームド化問題

を引き起こしてしまう。

定数で指定する

そこで、まず、セルの番地を定数にぶち込んでやってみる。

リスト1 標準モジュール
Private Const CELL_INDEX As String = "A1"

Public Sub testConstant()
  Dim Sh As Worksheet
  Set Sh = ActiveSheet
  Debug.Print Sh.Range(CELL_INDEX).Value
End Sub

ご覧のとおり、定数CELL_INDEXに、文字列A1をぶち込んでおき、

Debug.Print Sh.Range(CELL_INDEX).Value

で、A1セルの値(笑)をイミディエイトに表示させてみようという企て。

f:id:akashi_keirin:20180710200549j:plain

こんなふうに、A1セルに値(笑)を入力しておいて、実行してみる。

f:id:akashi_keirin:20180710200557j:plain

おお! ちゃんと動いた!

変数で指定する

ならば、今度は、変数でやってみる。

スト2 標準モジュール
Private Const CELL_INDEX As String = "A1"

Public Sub testConstant()
  Dim Sh As Worksheet
  Set Sh = ActiveSheet
  Debug.Print Sh.Range(CELL_INDEX).Value
  Dim cellIndex As String
  cellIndex = "A1"
  Debug.Print Sh.Range(cellIndex).Value
End Sub

見てのとおり、今度は、変数cellIndexに、文字列A1をぶち込んで、

Debug.Print Sh.Range(cellIndex).Value

で、A1セルの値(笑)をイミディエイトに表示させようという企て。

先ほどと同じ状態で実行してみると、

f:id:akashi_keirin:20180710200607j:plain

なんと、あっさり動いた!

結論

Rangeプロパティのインデックスは、定数や変数でも指定することができます。

おわりに

なんで、こんな簡単なことを今までやってこなかったのだろう。