エクセルVBAのオブジェクト・コレクション

<< VBAのプロシージャ構造 :前の記事

前回のプロシージャの構造の中でステートメントを解説しましたが、ステートメントの中には「オブジェクト」が存在します。今回はそのオブジェクトについて詳しく解説します。

目次

オブジェクト・コレクションとは

オブジェクトとはエクセルのワークブック・ワークシート・セル・グラフ・オートシェイプなど、操作の対象となるもののことを言います。また、複数のオブジェクトの集合体はコレクションと呼ばれます。

例えば、以下の図で説明すると、ワークブック・ワークシート・セルはオブジェクトですが、ワークシート全体はコレクションとなります。

VBAのオブジェクト

オブジェクトの階層構造

オブジェクトは、オブジェクト同士の親子関係で構成されています。たとえば、下記の図を見て分かるようにExcel本体のアプリケーションを表すApplicationオブジェクトには、ブックを表すWorkbookオブジェクトが含まれています。

この場合、ApplicationオブジェクトがでWorkbookオブジェクトがの関係にあります。このようにオブジェクト同士の親子関係をもとに階層化されたオブジェクトの構造を「オブジェクトの階層構造」または「オブジェクトモデル」といいます。

ちなみに、Worksheetオブジェクトから見たWorkbookオブジェクトのような親オブジェクトのことを「コンテナ」と呼びます。

オブジェクトモデル

階層構造の書き方

階層構造のオブジェクトを利用するには決まった書式に則って記述します。決まった書式とは、以下のように親オブジェクト名と子オブジェクト名の間に「.(ピリオド)」で結んで記述します。

親オブジェクト名.子オブジェクト名

オブジェクトを確認

ここでは、マクロの記録と実行で作成したマクロからどのようなオブジェクトがあるか確認していきます。以下が作成されたマクロの詳細になります


Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2014/12/19  ユーザー名 : xxx
'

'
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "りんご"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "100"

End Sub

マクロを見てみると「Range("A2")」のA2セルオブジェクトと「Range("B2")」のB2セルオブジェクトがあります。その後にSelectメソッドと呼ばれているものがありますが、こちらは直訳すると「選択」になりますので、それぞれのセルを選択する処理になります。


Range("A2").Select
Range("B2").Select

ExcelのVBAで記述する場合は、このようにオブジェクトを指定してからそのオブジェクトに対してどのような処理を行うかを記述します。ただし、これまで説明したようにオブジェクトの中には多くのオブジェクトが存在します。

本来であれば「ApplicationオブジェクトのWorkbookオブジェクトの・・・」のように上位オブジェクトから目的のオブジェクトまで階層をたどって記述していきますが、中には省略できるオブジェクトもあります。

今回の事例がまさに省略できるオブジェクトで本来であれば以下のように記述をします。こちらはExcelの「Book1」ワークブックの「Sheet1」ワークシートのセルA2オブジェクトを表していますが非常に長い記述になっているのが分かるかと思います。


Application.Workbooks("Book1").Worksheets("Sheet1").Range("A2").Select
Application.Workbooks("Book1").Worksheets("Sheet1").Range("B2").Select

このように省略するとコードの簡素化も図れますが、ワークブックやワークシート間でデータのやり取りをする場合に対象のオブジェクトを指定しなければ期待通りの処理を行えないこともあります。その処理がどのオブジェクトに対して行う処理なのかを意識しながら記述するようにしましょう。

VBAで操作できる主なオブジェクト

エクセルVBAには様々なオブジェクトを操作することができますが、こちらでは、主に利用されるオブジェクトを紹介します。こちらを見て分かるようにsが付いた複数形の場合はコレクションとなります。

オブジェクトVBAのオブジェクト・コレクション
アプリケーションApplicationオブジェクト
ウィンドウWindowsコレクション
Windowオブジェクト
ワークブックWorkbooksコレクション
Workbookオブジェクト
ワークシートWorksheetsコレクション
Worksheetオブジェクト
シートsheetsコレクション
sheetオブジェクト
セルcellsコレクション
cellオブジェト
Rangeオブジェクト
グラフChartsコレクション
Chartオブジェクト
ユーザーフォームUserFormオブジェクト

コレクションの使い方

コレクションは複数のオブジェクトの集合体と説明しましたが、VBAではコレクション名を記述することでコレクションに対して操作することができます。コレクションを操作するには、大きく分けて以下の2つの方法があります。

  • コレクションとしてオブジェクトをまとめて操作する
  • コレクションの中のオブジェクトを選択して操作する

コレクションとしてオブジェクトをまとめて操作する場合は、コレクション名に「.(ピリオド)」を付けて処理を実行するプロパティメソッドを記述します。

コレクション名.プロパティ名/メソッド名

下記はコレクションとしてオブジェクトをまとめて操作した事例です。Countプロパティはオブジェクトの数を返しますので、こちらではセル1にワークシートの数を代入しています。


Sub Sample()

 Range("A1") = Worksheets.Count

End Sub

続いて、コレクションの中のオブジェクトを選択して操作する場合は、コレクション名に「()」(カッコ)を付けてその中にインデックス番号もしくはオブジェクトの名前を記述します。

コレクション名(インデックス番号もしくはオブジェクトの名前).プロパティ名/メソッド名

下記はコレクションの中のオブジェクトを選択して操作した事例です。Worksheetsコレクションの1番目のワークシートを選択する処理になります。


Sub Sample()

 Worksheets(1).Select

End Sub

他にも以下のように記述できます。こちらはWorksheetsコレクションの中でワークシート名が「Sheet1」を選択する処理になります。


Sub Sample()

 Worksheets("Sheet1").Select

End Sub

このように特定のオブジェクトを利用する場合は、そのオブジェクトを取得するための正しい記述方法で取得しなければいけません。

今回のWorksheetオブジェクトで言えば「Worksheetsコレクション」「ActiveSheetプロパティ」を利用しなければ取得できず、「Worksheet」と記述して利用するとエラーが発生します。個別のワークシートを操作する場合でも「Worksheetsコレクション」は利用されるということを覚えておきましょう。

また、他のオブジェクトの取得方法も異なってきますので、それぞれのオブジェクトの記述方法についても十分気をつけましょう。

まとめ

今回は、オブジェクトとはどのようなものかについて解説しました。オブジェクトは数多く存在しますが、全てを覚える必要はありません。実際にプログラミングする場合は、処理をされるものがどのようなオブジェクトで構成されているのかを意識しながら記述するようにしましょう。

また、「セルの選択」処理では簡単に説明しましたが、オブジェクトだけでは何も操作できません。オブジェクトを操作するために「プロパティ」と「メソッド」というものが用意されています。次回は、まず「プロパティ」について解説していきます。

次の記事: オブジェクトのプロパティ >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。