- Home ›
- Excel VBA入門 ›
- 基本文法
オブジェクトとコレクション
VBA では特定のワークシートやセルを対象に情報を取得したり操作を行ったりします。このような VBA の対象となるものをオブジェクトと呼びます。また同じ種類のオブジェクトをまとめたものをコレクションと呼びます。例えばブックに含まれるすべてのワークシートをまとめてワークシートコレクションとして扱うことができます。ここでは Excel VBA におけるオブジェクトとワークシートについて解説します。
(Last modified: )
オブジェクトとは
VBA を使って操作の対象となるものがオブジェクトです。 VBA で利用可能なオブジェクトはかなりの数がありますが、その中でも主なオブジェクトには次のようなものがあります。
オブジェクト | 説明 |
---|---|
Application | Excel アプリケーション全体 |
Workbook | Excel ブック |
Worksheet | ワークシート |
Range | セル、行、列など |
Chart | グラフ |
Dialog | 組み込みダイアログボックス |
また次のようなオブジェクトもあります。
オブジェクト | 説明 |
---|---|
Font | オブジェクトのフォント属性 |
Hyperlink | ハイパーリンク |
Style | セル範囲のスタイル |
Error | セル範囲のエラー |
※ Excel VBA で用意されているすべてのオブジェクトについては「Excel VBAで用意されているオブジェクトの一覧」を参照されてください。
VBA ではオブジェクトに対してメソッドを使って操作を行うことができ、またオブジェクトのプロパティを使ってオブジェクトの設定内容を参照したり新しい値を設定することができます。
例えばセルを表す Range
オブジェクトに対して Clear
メソッドを実行すると、対象のセルがクリアされます。下記のサンプルでは A2
セルをクリアしています。
Option Explicit Sub テスト() Range("A2").Clear End Sub
またセルを表す Range
オブジェクトに対して Value
プロパティに値を代入すると、対象のセルに新しい値を設定できます。下記のサンプルでは A2
セルに 100 を入力しています。
Option Explicit Sub テスト() Range("A2").Value = 100 End Sub
このように対象であるオブジェクトに対してメソッドを実行したり、プロパティに値を設定することでできます。( VBA におけるメソッドとプロパティの使い方について詳しくは「プロパティとメソッド」を参照されてください)。
※ なお Range("A2")
というのはアクティブなワークシートの Range
プロパティで引数に "A2" を指定することでセル A2
を表す Range オブジェクトを指定しているという意味になります。あまりここでは気にされないで構いません。
コレクションとは
Excel のブックには複数のワークシートが含まれることがあり、 1 つ 1 つのワークシートは Worksheet
オブジェクトとして扱うことができます。このワークシートのように同じオブジェクトが複数ある場合に、複数のオブジェクトをまとめたものをコレクションと呼びます。コレクションもオブジェクトの一つです。
例えば次のようなコレクションがあります。
コレクション | 説明 |
---|---|
Workbooks | 開いているすべてのブック |
Worksheets | ブックに含まれるすべてのワークシート |
※ セルについてはコレクションがありませんのでご注意ください。
このあと説明しますが、コレクションにインデックス番号や名前を指定することでコレクションに含まれるオブジェクトを指定することができます。
コレクションに含まれるオブジェクト指定する
コレクションに含まれるオブジェクトはインデクス番号または名前を指定することでコレクションに含まれる特定のオブジェクトを指定することができます。
インデックス番号で指定する
コレクションに含まれるオブジェクトには 1 から順番にインデックス番号が付いており、インデックス番号を指定することでコレクションに含まれるオブジェクトを指定できます。例えば Workdsheets
コレクションにインデックス番号を使って特定の Worksheet
オブジェクトを指定するには次のように記述します。
Worksheets(インデックス番号)
ワークシートの場合、ブックの中の一番左に表示されているワークシートから順に 1, 2, 3, ... とインデクス番号が割り当てられています。例えば下記のサンプルではブックに含まれる 1 番左にあるワークシートを変数に代入しています。
Option Explicit Sub テスト() Dim ws As Worksheet Set ws = Worksheets(1) End Sub
このサンプルで変数に代入されたワークシートオブジェクトとは次のワークシートです。
ブックの場合はブックを開いた順番に 1, 2, 3, ... とインデックス番号が割り当てられています。例えば下記のサンプルでは開いているブックの中で 1 番最初に開いたブックを変数に代入しています。
Option Explicit Sub テスト() Dim wb As Workbook Set wb = Workbooks(1) End Sub
名前で指定する
またコレクションで名前を指定してコレクションに含まれるオブジェクトを指定できます。例えば Workdsheets
コレクションでシート名を使って特定の Worksheet
オブジェクトを指定するには次のように記述します。
Worksheets(シート名)
例えば下記のサンプルではブックに含まれるシート名が "Sheet2" のワークシートを変数に代入しています。
Option Explicit Sub テスト() Dim ws As Worksheet Set ws = Worksheets("Sheet2") End Sub
このサンプルで変数に代入されたワークシートオブジェクトとは次のワークシートです。
ブックの場合はブック名を使います。例えば下記のサンプルでは開いているブックの中でブック名が "Book1.xlsm" のブックを変数に代入しています。
Option Explicit Sub テスト() Dim wb As Workbook Set wb = Workbooks("Book1.xlsm") End Sub
このようにコレクションに対してインデックス番号または名前を指定することで、コレクション内のオブジェクトを指定することができます。
オブジェクトの階層構造について
VBA はオブジェクトは階層構造となっています。最上位には Application
オブジェクトがあり、順に Workbook
、 Worksheet
、 Range
、と階層が下がっていくことになります。
Application | +- Workbook(s) | +- Worksheet(s) | +- Range | +- Font など
この階層構造を使って 上位の階層のオブジェクト.下位の階層のオブジェクト
のように指定することで特定のオブジェクトを指定することができます。
例えば 1 番目のブックに含まれる 2 番目のワークシートの中のセル A2
を指定するには次のように記述できます。
Option Explicit Sub テスト() Dim r As Range Set r = Application.Workbooks(1).Worksheets(2).Range("A2") End Sub
なお省略可能なところは省略して簡潔に記述することもできます。
Option Explicit Sub テスト() Dim r As Range Set r = Worksheets(2).Range("A2") End Sub
またブックに含まれる 2 番目のワークシートの中のセル A2
のフォントのサイズを設定するには次のように記述できます。(下記で Size
はオブジェクトではなく Font
オブジェクトのプロパティです)。
Option Explicit Sub テスト() Worksheets(2).Range("A2").Font.Size = 20 End Sub
このように上位の階層から順番に指定していくことで、対象のオブジェクトを指定することができます。
-- --
Excel VBA におけるオブジェクトとワークシートについて解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。