今回は「オブジェクト」についての説明と、オブジェクトをくくるための「With」の使い方についてご説明します。
「オブジェクト」と言っても、WorkbookやWorksheet、Range等いろいろあります。
オブジェクトの基本概念や、変数へ代入の仕方などご説明したいと思います。
また、オブジェクトの概念を説明するうえで、コレクションについても把握する必要がありますので、コレクションについても簡単に説明します。
Withでくくることでオブジェクトを毎回記述する必要がなくなるため、コードをシンプルにする事もできます。
1.オブジェクトとは
オブジェクトとは、WorkbookやWorksheetなどの操作する対象の事です。
よく使用するオブジェクトには次のような種類があります。
変数の型名 | 意味 |
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つ目の別のオブジェクトに付随しているセルを操作する場合は、オブジェクトを明記します。