RangeオブジェクトとRangeプロパティの違いを初心者向けに解説
Applicationプロパティ を参照してApplicationオブジェクト を返し、そのメンバーであるWorkbooksコレクション を返すのにWorkbookプロパティ を参照、そのメンバーであるWorksheetsコレクション を返すのに…中略 Rangeオブジェクト を返すのにRangeプロパティ を参照、最後にValueプロパティ を参照して返されたものが前項の「オブジェクト の正体」です。
何が言いたいかというと、VBAの文法でよく「オブジェクト.プロパティ 」と表現されているのは 階層構造上のオブジェクト を表現 しているのであって、厳密には「プロパティ .プロパティ 」だということです。冒頭にも書きましたが オブジェクト を返すのはあくまでプロパティ です。
- Range (“A1”). Value …Rangeプロパティによって参照されたRangeオブジェクトのValueプロパティを取得している
「コードの書き出しはプロパティから」のような説明になっているかもしれませんが、そうではありません。 Application . ActiveWorkbook . ActiveSheet . Range (“A1”). Value の先頭は確かにApplicationプロパティ ですが、これも実は省略されています。省略せずに記述すると Excel . Application . ActiveWorkbook . ActiveSheet . Range (“A1”). Value になります。(オブジェクト).プロパティ.プロパティ.プロパティ.プロパティ.プロパティということです。やはり脳味噌が破壊されますね…
RangeオブジェクトとRangeプロパティの違いはない
Web上で見かける Rangeプロパティ という記述は、Rangeオブジェクト が指し示しているものとほとんどの場合同じ です。厳密に表現してプロパティ と記述してあるケース、初心者に分かりやすいようにオブジェクト と記述してあるケースなど、色々だと思います。
余談
オブジェクト の定義を自分なりに消化し、階層構造を理解した頃、今まで行き詰っていたことがすんなり頭の中に入ってくるようになりました。Rangeオブジェクト とRangeプロパティ の違いを理解しようとしたときの勉強が、思わぬ副作用として現れました。「点と点が線でつながる」とか「頭の中でバラバラだったパズルのピースが次々とはまっていく」といった感じです。
オブジェクト の正体がなんとなく分かるだけで、勉強の捗り方が大きく変わってきます。ここではさらっと流しましたが、クラス とメンバー の勉強を並行してすすめればさらに理解は深まります。