ExcelマクロVBA技術解説 | オブジェクトとプロパティの真実 | ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2013-02-18

オブジェクトとプロパティの真実

オブジェクトとプロパティについて、解説をします。


対象は、VBA中級以上になると思いますが、


初級の方でも、VBAって奥が深いんだなーと感動位は出来ると思います。(笑)


ただし、あまり役には立たないかもしれませんので、あしからず。


マクロを書いてる人に、したり顏で説明したら株が上がるかも知れません。


逆に、「混乱させるなー」と嫌われても、当方は責任を持ちません。(笑)



1.オブジェクトとプロパティの真実


私は、以前にこのように書きました。

オブジェクトとは

オブジェクトは、objectであり、物・物体のことです。

VBAで何か操作をしようとする対象となるものがオブシェクトです。

ブックやシート、そしてセルなどを指します。


プロパティとは

プロパティは、propertyであり、財産・資産のことです。

オブジェクトの持つ財産・資産のことであり、オブジェクトの性質を表すデータです。

セルの持つ値や書式は全て、セルのプロパティです。


メソッドとは

メソッドは、methodであり、方法。方式です。

オブジェクトに対する動作・操作を指定します。

セルを選択する、セルを削除する等です。


これは間違いではありません、しかし、正確とはいえません。

なぜなら、ブック、シート、セルはオブジェクトなのでしょうか?


では、

Range("A1").Value

このRangeは、何でしょうか?

前回の説明なら、オブシェクトと答えるしかありません。

そして、それは正しいです。

しかしこれは、

Application.ActiveWorkbook.ActiveSheet.Range("A1").Value

の省略形なのです。

その為、オブジェクト.オブジェクト.・・・.オブシェクト.プロパティ、と説明したりします。

オブジェクトは階層構造になっているとも説明します。

(初心者はそのように覚えてもらって結構です、いや、そう覚えて下さい。)


でもそれなら、オブジェクトの中にオブジェクトが含まれていると言う事でしょうか?

SheetオブシェクトはRangeオブジェクトの集合体なのでしょうか?

この辺から勘違いが発生するのかもしれません。


以下はどうでしょう。

Application.Workbooks(1).Worksheets(1).Range("B2:C100").Cells(1, 1).Value

Application.Workbooks(1).Worksheets(1).Cells(2, 2).Value

Application.Workbooks(1).Worksheets(1).Range("B2").Value

違いが分かりますか。

といいますか、一番上の記述自体を見たことが無いかもしれませんね。

これはどれも、「B2」セルを指します。


あれれ、Cellsっていったいどうなってるのと疑問になりませんか。


まず、結論を言えば、

Applicationオブジェクトの中には、プロパティWorkbooksがあり、Workbookのコレクション(集まり)です。

Workbookオブジェクトの中には、プロパティWorksheetsがあり、Worksheetのコレクション(集まり)です。

Worksheetオブジェクトの中には、プロパティRangeがあります。

Worksheetオブジェクトの中には、プロパティCellsがあります。

Rangeオブジェクトの中には、プロパティCellsがあります。


よけいに意味わかんなーいとか言われそうですね。


では、VBEでオブジェクトブラウザを見て見ましょう。

VBEの画面で、「表示」→「オブジェクトブラウザ」、または、F2


ここに、「クラス」というウインドウがあります。(プロジェクトの直ぐ右)

あれ、「クラス」って何?

いきなり疑問ですよね。

オブジェクトブラウザなのに、どこにオブジェクトがあるの?

ってなりますよね。

この「クラス」がオブジェクトと言っているものの正体です。


では、Applicationを見て下さい。

クリックすると、右側に、'Application' のメンバ(プロパティやメソッドの一覧)が表示されます。

中には、WorkBooksがありますので、選択して下さい。

下に、説明が表示されます。

Property Workbooks As Workbooks
読み取り専用
Excel.Application のメンバ


Propertyって、プロパティなの?

WorkBooksはオブジェクトでは無いのでしょうか。

そうなんです、ApplicationクラスのWorkBooksプロパティなのです。

でも、As WorkBooksとは何でしょうか?


Functionの戻り値の型は使いましたよね。

Function シート取得(ByVal strSht As String) As Worksheet
これです、これと同じだと考えて下さい。

このプロパティはWorkbooksを返します。

そして、コレクションなので、引数を指定することで、特定のWorkBookになります。


なんだかよく分からないですよね。

まあ、少し進んで、WorkSheetを見てみましょう。

この中には、Cellsもあれば、Rangeもあります。

Property Cells As Range
読み取り専用
Excel.Worksheet のメンバ

Property Range(Cell1, [Cell2]) As Range
読み取り専用
Excel.Worksheet のメンバ
ですから、

Worksheets(1).Cells(2, 2).Value

Worksheets(1).Range("B2").Value

のどちらも使用できるのです。

また、Rangeをみれば、Cellsがメンバに入っています。

なので、Range("B2:C100").Cells(1, 1).Valueこんな指定も可能なのです。


ここまで来ると、では、WorkSheetやCellsやRangeはプロパティなのかとなります。


そうなんです、コードの記述上では、これらはプロパティなのです。

だって、VBEでは、Worksheetsの後に候補が自動表示されますよね。

この候補は、そのオブジェクトのプロパティやメソッドの一覧なのですから。


そして、これらのプロパティは、それぞれの同名のクラス、つまりオブジェクトを返します。

従って、結果として、オブジェクトを操作できているのです。


つまり、Worksheetsプロパティを使い、Worksheetオブジェクトを参照し、

さらにその中の、Rangeプロパティを使い、Rangeオブジェクトを参照しているのです。


書いている最中はプロパティ、書き終わった瞬間に、オブジェクトへ、へーんしーん!

みたいな感じです。


もし仮に、Excelの開発担当者がスペルを間違えて(絶対にない、ありえない。←仮の話!)

Property Lange(Cell1, [Cell2]) As Range
としてしまったら、我々は、みんなで、Langeを使うことになります。←絶対にいやだー!


なんとなく理解出来ましたでしょうか。

実際に、自分でクラスを作成してみれば、直ぐに分かる事なのですが、

とりあえずは、そんなものなのか、程度の理解で全く問題ありません。

Rangeは結果として、Rangeオブジェクトを参照していることに間違いはないのですから。



いやいや、結構難しいというか、訳分からないと言うか、そんな感じでしょうか。


私も書きながら、その説明はどうなんだ・・・と自分に突っ込みながらの説明でした。


はっきりいって、少なくとも私のブログを読む人は、知っている必要はありません。

VBAやVBで生活しようと思っているなら、知っておいた方がよいでしょう。

(ずっとやっていれば、そのうち自然と理解しますけどね。)






同じテーマ「マクロVBA技術解説」の記事

リボンを非表示、2003以前ならメニューを非表示
印刷ページ設定の余白をセンチで指定する(CentimetersToPoints)
文字列としてのプロシージャー名を起動する方法(Run,OnTime)
ドキュメントの作成者を取得(GetObject,BuiltinDocumentProperties)
画像サイズ(横x縦)の取得について
文字種(ひらがな、全半角カタカナ、半角英大文字等々)の判定
オブジェクトとプロパティの真実
オブジェクト式について
オブジェクトの探索方法
条件付きコンパイル(32ビット64ビットの互換性)
VBAのクラスとは(Class,Property,Get,Let,Set)

新着記事 ・・・新着記事一覧を見る

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.繰り返し処理(For Next)|ExcelマクロVBA入門
10.とにかく書いて見よう(Sub,End Sub)|VBA入門



  • >
  • >
  • >
  • オブジェクトとプロパティの真実

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ

    ↑ PAGE TOP