[Excel VBA]
Rangeオブジェクトの既定のプロパティ(デフォルトプロパティ)をご存知でしょうか。「Valueプロパティ」と答える人が多いかもしれませんね。ここではRangeオブジェクトの既定のプロパティについて、考察していきます。
既定のプロパティは _Default プロパティ
既定のプロパティとは、オブジェクトの記述だけで参照できるプロパティのことです。通常は「オブジェクト.プロパティ」と記述するところを、既定のプロパティの場合はプロパティ名を省略して「オブジェクト」と記述するだけでそのプロパティ値を取得できます。
次の2つのステートメントを実行すると、いずれもセルA1に「1234」と入力されます。コード2ではプロパティ名が省略されており、「Value」がRangeオブジェクトの既定のプロパティのように見えます。
|
|
|
|
また、次の2つのステートメントの場合は、いずれもセルC2に太字が設定されます。コード4では、「Item」がRangeオブジェクトの既定のプロパティのように見えます。
|
|
|
|
しかし、実際にはRangeオブジェクトの既定のプロパティは、「_Default」というプロパティです。このプロパティは非表示メンバーで自動メンバーリストには現れませんが、VBEで「Cells(」と入力したときのクイックヒントには表示されるので、目にしたことはあるでしょう(図1)。
「_Default」が既定のプロパティであることは、オブジェクトブラウザーで確認できます(図2)。
_Defaultプロパティは、引数を指定しない場合はValueプロパティ、引数を指定する場合はItemプロパティと同様の処理を行います。そのため、ValueプロパティとItemプロパティの2つが既定のプロパティのような挙動をするのです。
コード2とコード4は、既定のプロパティを省略せずに書くと、それぞれコード5、コード6のようになります。
|
|
|
|
なお、コード3のItemプロパティやコード6の_Defaultプロパティは省略するのが一般的(コード4のように記述するのが一般的)ですが、Valueプロパティの場合は省略するとコードの意図がわかりづらくなるので、コード1のようにプロパティ名を明記したほうがよいでしょう。