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

VBA では特定のワークシートやセルを対象に情報を取得したり操作を行ったりします。このような VBA の対象となるものをオブジェクトと呼びます。また同じ種類のオブジェクトをまとめたものをコレクションと呼びます。例えばブックに含まれるすべてのワークシートをまとめてワークシートコレクションとして扱うことができます。ここでは Excel VBA におけるオブジェクトとワークシートについて解説します。

(Last modified: )

オブジェクトとは

VBA を使って操作の対象となるものがオブジェクトです。 VBA で利用可能なオブジェクトはかなりの数がありますが、その中でも主なオブジェクトには次のようなものがあります。

オブジェクト説明
ApplicationExcel アプリケーション全体
WorkbookExcel ブック
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)

ブックの場合はブックを開いた順番に 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

このサンプルで変数に代入されたワークシートオブジェクトとは次のワークシートです。

コレクションに含まれるオブジェクト指定する(2)

ブックの場合はブック名を使います。例えば下記のサンプルでは開いているブックの中でブック名が "Book1.xlsm" のブックを変数に代入しています。

Option Explicit

Sub テスト()
    Dim wb As Workbook
    Set wb = Workbooks("Book1.xlsm")
End Sub

このようにコレクションに対してインデックス番号または名前を指定することで、コレクション内のオブジェクトを指定することができます。

オブジェクトの階層構造について

VBA はオブジェクトは階層構造となっています。最上位には Application オブジェクトがあり、順に WorkbookWorksheetRange 、と階層が下がっていくことになります。

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 )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。