Application.Worksheets
は、VBA(Visual Basic for Applications)における Application
オブジェクトのプロパティで、開いているすべてのワークブックのすべてのワークシート(シート)にアクセスするためのコレクションを提供します。
ただし、実務ではほとんどのケースで Workbook.Worksheets
を使用します。Application.Worksheets
は全ブック横断的にアクセスするため、特定のブックを操作したい場合は注意が必要です。
🔷 基本構文
Application.Worksheets
これは、現在開いているすべてのブックの中にある すべてのワークシートの集合(コレクション) を返します。
🔷 使い方と動作のイメージ
使用例:
Sub 全シート名を表示()
Dim ws As Worksheet
For Each ws In Application.Worksheets
Debug.Print ws.Name
Next ws
End Sub
このコードでは、すべての開かれているブック内のすべてのシートの名前が出力されます。
🔷 一般的な使い方(Workbookからのアクセス)
実務でよく使うのはこちら:
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "Hello"
または:
Workbooks("Book1.xlsx").Worksheets(1).Activate
これにより、特定のブック内の特定のシートを確実に対象にできます。
🔷 Application.Worksheets の注意点
項目 | 内容 |
---|---|
対象範囲 | 開いているすべてのブックのすべてのシート |
インデックス指定 | Application.Worksheets(1) は、最初に読み込まれたシート(全ブックの中で) |
同名シートの存在 | 複数ブックで Sheet1 など同名シートがあると、名前でのアクセスは不確定になりやすい |
操作対象が曖昧 | どのブックのシートかを明確にしないと、誤操作の原因になる |
🔷 使用例:すべての開いているシートのA1に値を入力
Sub 全シートに入力()
Dim ws As Worksheet
For Each ws In Application.Worksheets
ws.Range("A1").Value = "共通入力"
Next
End Sub
⚠️ これはすべての開いているブックのすべてのシートに入力します。誤って他のファイルも変更してしまうリスクがあるため、使う際は注意が必要です。
🔷 .Count で全シート数を取得
Sub シート数をカウント()
MsgBox "開いている全シート数: " & Application.Worksheets.Count
End Sub
🔷 Worksheetへのアクセス方法まとめ
方法 | 内容 | 使用頻度 |
---|---|---|
Application.Worksheets(1) | 開いているすべてのシートから1番目 | 低(あまり使わない) |
Workbooks("Book1.xlsx").Worksheets(1) | 指定ブック内の1番目のシート | 高 |
ThisWorkbook.Worksheets("Sheet1") | マクロが書かれているブックのSheet1 | 非常によく使う |
ActiveSheet | 現在アクティブなシート | 中(簡易な処理向け) |
🔷 実務での推奨
通常、Application.Worksheets
は範囲が広すぎて制御が難しいため、以下のようなブック単位での指定が推奨されます:
Dim ws As Worksheet
Set ws = Workbooks("Book1.xlsx").Worksheets("売上表")
🔷 まとめ
項目 | 内容 |
---|---|
メソッド名 | Application.Worksheets |
型 | Worksheets コレクション |
対象 | すべての開いているブックのワークシート |
用途 | 全ブック横断的な操作が必要な場合(注意が必要) |
主な注意点 | 対象が曖昧になりやすく、意図しないブックにも影響を与える可能性あり |
実務での推奨 | 可能な限り Workbook.Worksheets を使用して明確に対象を絞る |
✅ よく使う安全な書き方
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks("Book1.xlsx")
Set ws = wb.Worksheets("Sheet1")
ws.Range("A1").Value = "データ入力"