「VBA Access Excel ワークシートの数」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。
この記事では、Excelのワークシートの枚数や、グラフシートも含むシートの枚数を取得するコードをご紹介します。
ワークシートの枚数を取得するSubプロシージャ
Excelブックを1つ開いた状態で以下のSubプロシージャを実行すると、そのブックのワークシートの枚数がメッセージボックスに表示されます。
On Error GoTo ErrHandl
With GetObject(Class:="Excel.Application")
MsgBox .Worksheets.Count
End With
Exit Sub
ErrHandl:
Select Case Err.Number
Case 429
MsgBox "Excelが起動していないようです。"
Case 91
MsgBox "Excelファイルが開かれていないようです。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
End Sub
Access VBAからExcelを操作するには、まず、Excel.Applicationオブジェクトへの参照を取得する必要があります。
上記のSubプロシージャでは、VBAのGetObject関数の引数Classに文字列「Excel.Application」を指定することで、起動しているExcelへの参照を取得しています。
With GetObject(Class:="Excel.Application")
Excel.Applicationへの参照を取得した後は、実質的にExcel VBAのコードです。
Excel.Applicationに用意されているWorksheetsプロパティを使うと、
With GetObject(Class:="Excel.Application") MsgBox .Worksheets.Count
ワークシートを表すWorksheetオブジェクトのみを要素オブジェクトとして含むExcel.Sheetsコレクションを取得できます。
Worksheetのみを要素オブジェクトとして含むSheetsコレクションのCountプロパティでワークシートの枚数を取得できます。
With GetObject(Class:="Excel.Application") MsgBox .Worksheets.Count
シートの枚数を取得する場合
ワークシートの枚数ではなく、グラフシートも含むシートの枚数を取得したい場合、
With GetObject(Class:="Excel.Application") MsgBox .Worksheets.Count
の部分を、
With GetObject(Class:="Excel.Application") MsgBox .Sheets.Count
としてください。
Excelの、Application.Sheetsプロパティを使うと、Worksheetオブジェクトだけでなく、グラフシートを表すChartオブジェクトも要素として含むSheetsコレクションが取得できます。
そのSheets.Countプロパティですべてのシートの枚数を取得できます。
Application.Worksheetsの戻り値はSheets
Excelの、Application.Worksheetsの戻り値が、Excel.Worksheetsコレクションだと思っていた方には、以下のような記事を参考に確認しておくことをおすすめします。
Home » Access VBA » Access VBAでExcelのシート数を取得する