Home » エクセルマクロ・Excel VBAの使い方 » 「オブジェクト名.プロパティ」という解説はウソですよ

「オブジェクト名.プロパティ」という解説はウソですよ

対象:Excel2007, Excel2010, Excel2013

VBA(Visual Basic for Applications)のコレクションオブジェクトについて、記事を書きました。

その続きの、コレクションオブジェクトから単一オブジェクトを取得するコードについて解説したいと思いますが、その前にどうしも書いておかなければいけないことがあります。

一般的によく見かけるオブジェクト式に書かれているのは、オブジェクト名ではなくプロパティだということです。

オブジェクトを特定する記述であるオブジェクト式について、
 「オブジェクト名.プロパティ」
 「オブジェクト名.メソッド」
のように書くといった解説が行われているWebや市販の書籍を見かけることがあります。

この誤った解説に騙されてしまっている人が、相当、いらっしゃいます。

[スポンサードリンク]

コード内に書かれるのはオブジェクト名なのか?

「オブジェクト名.プロパティ」という解説をそのまま信じてしまうと、例えば「Range("A1").Value」というオブジェクト式の「Range」を、オブジェクトの名前と理解するのは自然なことでしょう。

ですが、
「Range("A1").Value」というオブジェクト式に現われる「Range」は、
「Rangeオブジェクト」のRangeではありません。
「Rangeプロパティ」のRangeなのです、本当は。

仮に、
「オブジェクト名.プロパティ」
という解説を素直にそのまま信じるとしたならば、
 「ActiveCell.Value」は
 「ActiveCellという名前のオブジェクトのValueプロパティ」
 「Cells(1, 1).Value」は
 「Cellsという名前のオブジェクトのValueプロパティ」
と解釈しなければ、理屈が通らなくなってしまいます。

ですが、全オブジェクトを表示してくれるツールでもあるオブジェクトブラウザーのクラスペインをいくら探しても、ActiveCellという名前のオブジェクトも、Cellsという名前のオブジェクトも見つかりません。

「オブジェクト名.プロパティ名」という解説に騙されるな

もしも、ActiveCellという名前のオブジェクトが存在するならオブジェクトブラウザーのクラスペインで、Actionsの下に、ActiveCellが存在しているはずです。

もしも、Cellsという名前のオブジェクトが存在するならオブジェクトブラウザーのクラスペインで、CellFormatの下に、Cellsが存在しているはずです。

そんなオブジェクトはExcel VBAには存在しませんから、もちろん表示されるわけもありません。

コードに書かれるのはオブジェクト名ではなくプロパティ

結局、標準モジュール内の一般的なコードに書かれているのは、オブジェクト名ではないのです。

標準モジュール内のプロシージャでオブジェクト名を書くことも可能ですが、そのようなコードの例を見かけることは決して多くはありません。

Rangeも、ActiveCellも、Cellsも、オブジェクト名ではなく、プロパティなのです。

RangeもActiveCellもCellsも、グローバルのメンバーであるため、上位のオブジェクトへの参照・上位のオブジェクト式を書かないことが一般的ですが、勿論、上位のオブジェクト式から書くこともできます。

上位のオブジェクト式であるApplicationからコードを書いてみると、RangeもActiveCellもCellsもプロパティだということがよく見えてきます。

自動メンバー表示のアイコンを見ると、Rangeにはプロパティのアイコンが表示されています。

「オブジェクト名.プロパティ名」という解説に騙されるな

ActiveCellにもプロパティのアイコンが表示されています。

「オブジェクト名.プロパティ名」という解説に騙されるな

Cellsにもプロパティのアイコンが表示されています。

「オブジェクト名.プロパティ名」という解説に騙されるな

コードに書かれているのは、RangeもActiveCellもCellsもプロパティで、コードが実行されたときに、いずれもRangeオブジェクトを返すのです。

RangeもActiveCellもCellsも、グローバルメンバーであるため上位のオブジェクトへの参照・上位のオブジェクト式を省略できるプロパティなのです。

「オブジェクト名.プロパティ名」という解説に騙されるな

「オブジェクト名.プロパティ」という、記述に騙されないでください。

コードに書かれているのは、あえて書くなら「プロパティ.プロパティ」ですが、こんな書き方をしても、オブジェクト式を理解できていないレベルの方には、まったく意味がわからなくなってしまいます。ですから、オブジェクト式についてしっかり理解してらっしゃる著者さんは、書かれているプロパティがコード実行時にオブジェクトを返すということで、
「オブジェクト.プロパティ」
という記述をしてらっしゃるはずです。
誤解を与え続けてしまう、間違った、
「オブジェクト名.プロパティ」
という書き方ではなく。

なお丁寧に書くならば、コードに書かれているのは「(オブジェクトを返す)プロパティ.(単なるデータを返す)プロパティ」でしょう。

変数宣言部に書かれるのはオブジェクト名

なお、コードの中に出てくるRangeは、上記のとおりプロパティであって決してオブジェクト名ではありませんが、変数宣言に出てくる「Range」はオブジェクト名です。

変数宣言するときの自動メンバー表示のアイコンは、オブジェクトのアイコンですよね。

「オブジェクト名.プロパティ名」という解説に騙されるな

変数宣言で出てくる「Range」はオブジェクト名ですが、変数宣言以外で出てくる、オブジェクトを参照するための記述・オブジェクト式で書かれる「Range」は、しつこいようですが、オブジェクト名ではなくプロパティです。

これまで、「Range("A1").Value」のRangeを、RangeオブジェクトのRangeと思い込んでいた方は、この記事を一度読んだだけだと、相当に混乱するはずです。が、その混乱を抜けてオブジェクト式の文法をちゃんと理解すると、今までよく読めていなかったVBAのコードが、まったく違うものに見えてくることをお伝えしておきます。

最終更新日時:2018-12-30 06:01

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 「オブジェクト名.プロパティ」という解説はウソですよ

TrackBack:5

TrackBack URL
プロパティは2種類ある from インストラクターのネタ帳
プロパティは、単なるデータを取得するプロパティと、オブジェクトを取得するプロパティに分類できます。
Rangeはオブジェクト?プロパティ? from インストラクターのネタ帳
Excel VBAで、変数宣言に登場する「Range」はオブジェクトで、実際に処理を行う部分に登場する「Range」はプロパティです。
Cellsオブジェクトは存在しない from インストラクターのネタ帳
Excel VBAにCellsという名前のオブジェクトは存在しません。コード内でよく見かけるCellsはRangeオブジェクトを返すプロパティです。
Excelマクロ入門書籍をたくさん見て驚いた from インストラクターのネタ帳
2011年に「ビジネスパーソンのためのExcelマクロ入門講座」を開催するように...
優しいを目指したExcel VBA入門書 from インストラクターのネタ帳
私(伊藤潔人)が初めて書かせていただいた本『いちばんやさしいExcel VBA...

Home » エクセルマクロ・Excel VBAの使い方 » 「オブジェクト名.プロパティ」という解説はウソですよ

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.