オーロラさんの勉強帳

SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

VBA 再入門34 Workbooksコレクション・Workbookオブジェクト、Worksheetsコレクション・Worksheetオブジェクト

目次

Workbooksコレクション・ Workbookオブジェクトについて

Excelで複数のブックを開いている場合、複数のブックはWorkbooksコレクション、任意の1ブックはWorkbookオブジェクトになります。任意のブックを操作する場合は、必ず「Workbooksコレクションの中のどのブック」かを指定する必要があります。


例えば、以下の4ファイルをオープンしていて、Z.xlsmの標準モジュールにセル「A1」に100を代入するコードを記載して、実行します。
f:id:auroralights:20210125214126p:plain

<Z.xlsmの標準モジュール:アクティブなブックのアクティブなシートに処理>

Sub sample()
    Range("A1") = 100
End Sub

この場合はアクティブなブックのセルA1に100が入力されます。Z.xlsmがアクティブであればZ.xlsmのアクティブなシートのセルA1にA.xlsxがアクティブであればA.xlsxのアクティブなシートのセルAに100が入力されます。


決まった特定のブックに処理をしたい場合は、以下のようにWorkbooksコレクションのどのブック(オブジェクト)かを指定する必要があります。
どのブックかを指定すると、そのブックのどのワークシートかも指定する必要があります。

<Z.xlsmの標準モジュール:A.xlsxのシート1に処理>

Sub sample()
    Workbooks("A.xlsx").Worksheets("Sheet1").Range("A1") = 100
End Sub

上記の場合は、どのブックがアクティブでもA.xlsxのSheet1のセルA1に100が入力されます。


以下の記事はワークシートオブジェクトですが、オブジェクトを指定しない場合、標準モジュール、シートモジュール、ブックモジュールのどこに記載されているかで、どのシートが指定されるかの違いを紹介しています。
auroralights.jp

複数のブックの操作について

複数のブックの中の任意のブックを操作するには、Workbookコレクションでブックを指定しますが、ブックの指定には、「ブックの名前で指定する方法」と、「Excelが開いた順番に付けられる番号で指定する方法」の2つの方法があります。

'--1.ブック名で指定する方法
Sub sample()
    Workbooks("A.xlsx").Activate
End Sub
'--2.ブックの開いた番号で指定する方法
Sub sample()
    Workbooks(3).Activate
End Sub

※Activateメソッドは指定したブックをアクティブにするメソッドになります。

Worksheetsコレクション・オブジェクトについて

ブック内のワークシートはWorksheetsコレクション、特定のワークシートはWorksheetオブジェクトとして操作します。
ただし、シートはワークシートだけではなく、グラフシートやExcel4.0のマクロを記述するためのMacroシート、Excel5.0で使われていたダイアログシートがあります。

<Excelのシートの種類>
f:id:auroralights:20210125234714p:plain

<Worksheetsコレクション>
f:id:auroralights:20210125235636p:plain

<Sheetsコレクション>
f:id:auroralights:20210125235735p:plain

Worksheetsコレクションはブック内の全てのワークシート、Sheetsコレクションはワークシートだけでなくグラフ、Macro、ダイアログシートを含めたブック内の全てのワークシートを表します。
WorksheetsコレクションはSheetsコレクションに含まれます。

以下の2つのコードは同じSheet1を指定しています。

Sub sampleSheet()
    '--Worksheetsコレクション
    Worksheets("Sheet1").Activate
End Sub

Sub sampleSheet2()
    '--Sheetsコレクション
    Sheets("Sheet1").Activate
End Sub

複数のシートの操作について

複数のシートの場合は、どのブックのどのシートかを指定します。

以下のコードを標準モジュールに記述した場合は、アクティブブックに対して以下の処理をします。

Sub sampleSheet()
    '--Worksheetsコレクション
    Worksheets("Sheet1").Activate
End Sub


どのブックかを指定することで、特定のシートに対して処理を実施できます。

Sub sampleSheet()
    '--Worksheetsコレクション
    Workbooks("Book1.xlsm").Worksheets("Sheet1").Activate
End Sub