【Excel VBA】Rangeオブジェクトの既定のプロパティ…_Defaultプロパティ

[Excel VBA]

Rangeオブジェクトの既定のプロパティ(デフォルトプロパティ)をご存知でしょうか。「Valueプロパティ」と答える人が多いかもしれませんね。ここではRangeオブジェクトの既定のプロパティについて、考察していきます。

スポンサーリンク

既定のプロパティは _Default プロパティ

既定のプロパティとは、オブジェクトの記述だけで参照できるプロパティのことです。通常は「オブジェクト.プロパティ」と記述するところを、既定のプロパティの場合はプロパティ名を省略して「オブジェクト」と記述するだけでそのプロパティ値を取得できます。

次の2つのステートメントを実行すると、いずれもセルA1に「1234」と入力されます。コード2ではプロパティ名が省略されており、「Value」がRangeオブジェクトの既定のプロパティのように見えます。

  1. Range("A1").Value = 1234
  1. セルA1の値を「1234」にする
  1. Range("A1") = 1234
  1. セルA1の値を「1234」にする

また、次の2つのステートメントの場合は、いずれもセルC2に太字が設定されます。コード4では、「Item」がRangeオブジェクトの既定のプロパティのように見えます。

  1. Cells.Item(2, 3).Font.Bold = True
  1. セルC2に太字を設定する
  1. Cells(2, 3).Font.Bold = True
  1. セルC2に太字を設定する

しかし、実際にはRangeオブジェクトの既定のプロパティは、「_Default」というプロパティです。このプロパティは非表示メンバーで自動メンバーリストには現れませんが、VBEで「Cells(」と入力したときのクイックヒントには表示されるので、目にしたことはあるでしょう(図1)。

図1 クイックヒントに_Defaultプロパティが表示される。

「_Default」が既定のプロパティであることは、オブジェクトブラウザーで確認できます(図2)。

図2
(1) VBEで[表示]メニュー→[オブジェクトブラウザー]を選択。
(2) [クラス]から[Range]を選ぶ。
(3) オブジェクトブラウザー上を右クリックして[非表示のメンバーを表示]をクリック。 
(4) [Rangeのメンバー]から[_Default]を選ぶ。
(5) 「Excel.Rangeの既定メンバー」と表示される。

_Defaultプロパティは、引数を指定しない場合はValueプロパティ、引数を指定する場合はItemプロパティと同様の処理を行います。そのため、ValueプロパティとItemプロパティの2つが既定のプロパティのような挙動をするのです。

コード2コード4は、既定のプロパティを省略せずに書くと、それぞれコード5コード6のようになります。

  1. Range("A1").[_Default] = 1234
  1. セルA1の値を「1234」にする
  1. Cells.[_Default](2, 3).Font.Bold = True
  1. セルC2に太字を設定する

なお、コード3のItemプロパティやコード6の_Defaultプロパティは省略するのが一般的(コード4のように記述するのが一般的)ですが、Valueプロパティの場合は省略するとコードの意図がわかりづらくなるので、コード1のようにプロパティ名を明記したほうがよいでしょう。

スポンサーリンク

関連記事