VBAでは、**現在操作中のブック(アクティブブック)**や、名前で指定した特定のブックに対して処理を行うことができます。
複数ブックを開いて作業している場合、この指定方法を知っておくと非常に便利です。
1. アクティブなブックを操作する
Sub OperateActiveWorkbook()
'アクティブなブックの1行目にタイトルを書き込む
ActiveWorkbook.Sheets(1).Range("A1").Value = "タイトル"
End Sub
解説:
ActiveWorkbook
… 現在選択中のブックを指すSheets(1)
… 最初のシートを指定- この方法は対象ブックが切り替わると結果も変わるため、確実に同じブックを操作したい場合は名前指定が安全
2. ブック名を指定して操作する
Sub OperateSpecificWorkbook()
'ブック名を指定(拡張子まで含める)
Workbooks("Sample.xlsx").Sheets(1).Range("A1").Value = "データ入力"
End Sub
解説:
Workbooks("Sample.xlsx")
… 開いているブックの中から名前で指定- 拡張子を忘れるとエラーになる可能性が高いので注意
- もし対象のブックが開いていなければエラーになるため、存在確認コードを組み合わせるとより安全
3. 存在確認してから操作する例
Sub SafeOperateSpecificWorkbook()
Dim wb As Workbook
Dim targetName As String
Dim found As Boolean
targetName = "Sample.xlsx"
found = False
'開いているブックから探す
For Each wb In Application.Workbooks
If wb.Name = targetName Then
wb.Sheets(1).Range("A1").Value = "安全に操作"
found = True
Exit For
End If
Next wb
'見つからなかった場合
If Not found Then
MsgBox targetName & " は開いていません。"
End If
End Sub
解説:
For Each wb In Application.Workbooks
… 開いているすべてのブックを順に確認- 見つかった場合のみ処理を実行、見つからなければメッセージを表示
- この方法なら、ブックが開いていない場合のエラーを防げる
4. 注意点
- アクティブブック依存の処理は、他のマクロやユーザー操作でブックが切り替わると意図しない対象に書き込む可能性がある
- 複数人で使うマクロや重要なデータ処理は、必ずブック名で固定するのがおすすめ
- ブック名は大文字小文字を区別しないが、拡張子は含める必要がある
コメント