伊藤潔人著の「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"
となるらしいのです。
![](https://blogimg.goo.ne.jp/user_image/28/d7/4f6cdf1b00c6623806f7da63bc813b44.jpg)
今夜、帰宅後に、ネット上でさらに調べてみると、あるサイトに、次のような解説がされていました。
「_Defaultプロパティは、引数を指定しない場合はValueプロパティ、引数を指定する場合はItemプロパティと同様の処理をする。」
つまり、
Cells.[_Default](3, 5).Value = "goosyun"
は、
Cells.Item(3, 5).Value = "goosyun"
と同じことのようです。
むつかしい解説文ですが、そのような理屈らしいのです。
へぇ、知らなかった。
まぁ、そんな理屈は知らなくても、VBAコードは書けるし、私もこれまで上記理屈を知らずに、VBAを使ってきました。
でも、同じ使うにしても、できれば理屈を知った上で使うのがいいんでしょうねぇ。
この年齢になって、初めて仕入れた知識です(若いときに仕入れていたら、もっともっと役に立つ知識になっていたかもしれません。)。
それでは、また次の記事で
■■■■ goosyun ■■■■
![](https://blogimg.goo.ne.jp/user_image/1f/88/100bd06d901e04ad321a22f00b401819.png)