エクセル顧客管理 | 第14回.オブジェクトとプロパティの真実(GW特別号No1) | Excelマクロを駆使したカスタマイズ可能なエクセル顧客管理、エクセルVBAの学習教材



最終更新日:2014-11-11

第14回.オブジェクトとプロパティの真実(GW特別号No1)


エクセルで顧客管理を作ろう、


今回は、ゴールデンウイークでもあり、説明漏れの部分について、詳細な説明をすることにします。

(ゴールデンウイークと関係ないのでは、と突っ込まないで)


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


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


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


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


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


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



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


私は、第2回で、以下のように説明しました。


オブジェクトとは

オブジェクトは、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で生活しようと思っているなら、知っておいた方がよいでしょう。

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



ではでは、今回はここまで。


タイトルに、GW特別号No1とありますが、No2があるかどうかは・・・






同じテーマ「エクセル顧客管理」の記事

第15回.記述による処理速度の違い(GW特別号No2)
第16回.処理速度の向上はどこまでやれば良い(GW特別号No3)
第17回.商品マスタを作成、2段階の可変リスト
第18回.納品書を作成、顧客情報を取得(1)
第19回.納品書を作成、顧客情報を取得(2)
第20回.納品書を作成、顧客情報を取得(3)
第21回.イベント処理について

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



  • >
  • >
  • >
  • オブジェクトとプロパティの真実(GW特別号No1)

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


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

    ↑ PAGE TOP