Excel VBA オブジェクトとコレクションの説明とWithの使い方

ExcelVBA-基礎編

今回は「オブジェクト」についての説明と、オブジェクトをくくるための「With」の使い方についてご説明します。

オブジェクト」と言っても、WorkbookWorksheetRange等いろいろあります。

オブジェクトの基本概念や、変数へ代入の仕方などご説明したいと思います。

また、オブジェクトの概念を説明するうえで、コレクションについても把握する必要がありますので、コレクションについても簡単に説明します。

Withでくくることでオブジェクトを毎回記述する必要がなくなるため、コードをシンプルにする事もできます。

1.オブジェクトとは

オブジェクトとは、WorkbookWorksheetなどの操作する対象の事です。

よく使用するオブジェクトには次のような種類があります。

変数の型名意味
Objectオブジェクト全般
WorkBookブック
WorkSheetシート
Rangeセル
Chartグラフ

これ以外にもユーザーフォームやコントロール系もオブジェクトとなります。

Workbooks、Worksheets、Cellsなどは「〜s」という同じ種類のオブジェクトが複数集まったコレクションです。

コレクション自体もオブジェクトです。

コレクション(オブジェクト)は基本的に階層構造になっています。

Excelの場合は次のような階層構造です。

このコレクションから、ブック名、シート名やセル名を指定する事で、個別にオブジェクトを操作する事ができます。

コレクションとは?

突然出てきたコレクションですが、コレクションというのは、オブジェクトの集まりのことです。

たとえば、「WorkSheets」コレクションというのは複数形ですよね?

「WorkSheet」という1個1個のオブジェクトの集まりのことです。

今から操作しようとしているファイルにSheet1〜3まで3つのシートがあるとしたら、Sheet1、2、3はWorkSheetsコレクションの中にあり、このコレクションから操作したいシートをシート名や番号で指定してあげる事になります。

2.直接オブジェクトを参照する

オブジェクトは直接参照する事もできますし、配列に代入して操作する事もできます。

Workbooks(“ブック名”)、Worksheets(“シート名”)と名前を指定する方法と、Workbooks(インデックス番号)、Workbooks(インデックス番号)と番号で指定する方法があります。

Sub Sample1()

ThisWorkbook.Worksheets("Sheet1").Activate
ThisWorkbook.Worksheets("Sheet1").Range("A1").Select
ThisWorkbook.Worksheets("Sheet1").Cells(2, 3).Select

End Sub

ここで注意が必要です。

Selectを使用する場合に、現在アクティブになっているシート以外を指定するとエラーになります。

次の様に、Sheet1がアクティブの状態でSheet2を指定するとエラーになります。

Sub Sample2()

ThisWorkbook.Worksheets("Sheet1").Activate

ThisWorkbook.Worksheets("Sheet2").Cells(2, 3).Select

End Sub

3.配列に代入して参照する

オブジェクトを変数に代入する場合は、オブジェクト型で宣言します。

変数の使い方については「ExcelVBA 変数の宣言と適用範囲」と「VBA 変数のデータ型と型の指定方法」をご覧ください。

オブジェクト型といっても「As object」はもちろんオブジェクト型ですが、「As Workbook」や、「As Worksheet」、「As Range」もオブジェクト型です。

また、オブジェクト型に代入する場合は

Set 変数名 = オブジェクト」とSetを用います。

Sub Sample3()

Dim ThisBk  As Workbook
Dim myWs    As Worksheet

Set ThisBk = ThisWorkbook

ThisBk.Worksheets("Sheet1").Activate

ThisBk.Worksheets("Sheet1").Cells(2, 3).Select

Set myWs = ThisBk.Worksheets("Sheet1")

myWs.Cells(5, 3).Select

End Sub

4.Withの使い方

1つの処理で、同じオブジェクトを何度も参照する場合は、Withステートメントを使用します。

With オブジェクト」〜処理〜「End With」とすることで、オブジェクトの記載を省略する事が可能です。

この時、省略したオブジェクトに対する処理は「.」ピリオドから開始します。

ちなみに、「With オブジェクト」で指定したオブジェクトではないオブジェクトを操作する場合は、「.」ピリオドから開始してはいけません。

Sub Sample4()

Dim ThisBk  As Workbook
Dim myWs    As Worksheet

Set ThisBk = ThisWorkbook
Set myWs = ThisBk.Worksheets("Sheet1")

With myWs

    .Cells(5, 3).Select
    .Cells(5, 3) = "TEST"
    Worksheets("Sheet2").Cells(1, 1) = "TEST2"

End With

End Sub

上のコードでは変数に格納したオブジェクトに付随するセルは、「.」ピリオドで開始していますが、3つ目の別のオブジェクトに付随しているセルを操作する場合は、オブジェクトを明記します。

タイトルとURLをコピーしました