パソコン悪戦苦闘記録

できれば知っておきたいRangeの既定のプロパティ~エクセルVBA

 今朝の通勤列車の中で、
  伊藤潔人著の「Word VBA入門(2)」
を読んでいて、少々、衝撃を受けることがありました。


 それは、Excel VBA における、Rangeオブジェクトの既定のプロパティについてです。
 (Word VBA の本なのに、Excel VBA のことを学びました。)


 Excel VBA で、特定のセルにデータを入れるのに、
  Cells(3,5).Value = "goosyun"
などというコードを書きます。
これで、E3セルに文字列が入力されます。

 このコードは、Cellsというプロパティに、第1引数と第2引数を設定しているものだと、これまで信じてきました。そう信じて、疑いませんでした。
 ところが、実は、その理解は正しいものではなかったのです。
 上記の「Word VBA入門(2)」の解説を読んで、初めて知りました。

 「Cells」は、ワークシートの表全体を表すRangeオブジェクトを取得するプロパティです。そして、そのプロパティには引数はありません。
 では、Cells(3,5)の、「(3,5)」とはいったい何なのか?
 それは、Rangeオブジェクトの既定のメンバー(プロパティ)である、「_Defalt」の引数です。

 Cells(3,5).Value = "goosyun"
というコードを、一切の省略をせずに書くとすると、
 Cells.[_Default](3, 5).Value = "goosyun"
となるらしいのです。




 今夜、帰宅後に、ネット上でさらに調べてみると、あるサイトに、次のような解説がされていました。
 「_Defaultプロパティは、引数を指定しない場合はValueプロパティ、引数を指定する場合はItemプロパティと同様の処理をする。」

 つまり、
 Cells.[_Default](3, 5).Value = "goosyun"
は、
 Cells.Item(3, 5).Value = "goosyun"
と同じことのようです。

 むつかしい解説文ですが、そのような理屈らしいのです。
 へぇ、知らなかった。

 まぁ、そんな理屈は知らなくても、VBAコードは書けるし、私もこれまで上記理屈を知らずに、VBAを使ってきました。
 でも、同じ使うにしても、できれば理屈を知った上で使うのがいいんでしょうねぇ。

 この年齢になって、初めて仕入れた知識です(若いときに仕入れていたら、もっともっと役に立つ知識になっていたかもしれません。)。


 

それでは、また次の記事で
goosyun

コメント一覧

goosyun
アブリル さん
 「Cells ってコレクション」

 ですね、
 実質はコレクションに違いないですね。
 だから、Itemが用意されている。
 でも、コレクションという表現は使わず、
「Rangeオブジェクト」と呼びます。
 これはもう慣れるしかない、でしょうね。
アブリル(avril_kanabun)
そういえば Cells ってコレクションでもあったんですよね
Cells.item(3,4)
とか (^^)
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事