つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

できれば知っておきたい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