VBAでは、Workbook
やWorksheet
オブジェクトの扱い方がコードの安定性と信頼性に直結します。
この記事では、操作を安全かつ明確にするための考え方を厳選して解説します。
ブック・シート操作:Workbook/Worksheetオブジェクトの管理と安全な操作
1. ブック・シートは明示的に指定する
VBAでは、ActiveSheet
, ActiveWorkbook
の多用を避けるべきです。
なぜなら、予期せぬシートやブックが選択されてバグの温床になるから。
その代わりに、明示する方法が安全です。
Dim wb As Workbook
Dim ws As Worksheet
' ブックとシートを明示
Set wb = Workbooks("Book1.xlsx")
Set ws = wb.Worksheets("Sheet1")
ws.Range("A1").Value = "OK"
これにより、どのブック・シートを使うかを確実に指定できます。
つまり、バグが起きづらくなります。
2. Workbook/Worksheet コレクションを使いこなす
Workbooks
コレクションには、現在開いているすべてのブックが含まれています。
Sub ListOpenWorkbooks()
Dim wb As Workbook
Debug.Print "=== 現在開いているブック一覧 ==="
For Each wb In Application.Workbooks
Debug.Print wb.Name
Next wb
Debug.Print "=== 総計: " & Application.Workbooks.Count & " 冊 ==="
End Sub
' 出力例
' === 現在開いているブック一覧 ===
' MyReport.xlsx
' DataEntry.xlsm
' Summary.xls
' Template.xlsm
' === 総計: 4 冊 ===
同様に、Worksheets
コレクションにはブック内の全シートが入っています。
Sub ListAllWorksheets()
Dim ws As Worksheet
Debug.Print "=== Current Workbook Worksheets ==="
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Next ws
Debug.Print "=== Total Worksheets: " & ThisWorkbook.Worksheets.Count & " ==="
End Sub
' 出力例
' === Current Workbook Worksheets ===
' Sheet1
' DataEntry
' Summary
' Overview
' === Total Worksheets: 4 ===
これを活用することで、以下のようなことができます。
- ループ処理で特定のブックやシートを取り出す
- 複数ブックやシートのの同時操作
積極的にコレクションを使いましょう。
3. ブックの新規作成と保存の基本と安全策
ブック操作の基本は、以下の通りです。
Workbooks.Add
: 新しいブックを生成SaveAs
: 最初の保存Save
: 上書き
サンプルコードを示すと、以下の通り。
Sub CreateAndSaveWorkbook()
Dim wb As Workbook
' 新しいブックを作成
Set wb = Workbooks.Add
' ブックを保存(初めての保存では SaveAs 相当)
wb.SaveAs Filename:="C:\Temp\NewBook.xlsx"
' 作業後に保存して閉じる
wb.Save
wb.Close
End Sub
マクロを有効にして保存する場合には、拡張子を.xlsm
にすることを忘れずに。
4. シートの保護・解除
シートの誤操作から守ため、シート保護を活用しましょう。
Sub ProtectSheetWithDefaults()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' シートを保護
ws.Protect
End Sub
これにより、以下のような挙動になります。
引数名 | 保護内容・説明 |
---|---|
DrawingObjects | 図形やシェイプの編集が不可 |
Contents | ロックされたセル(Locked = True)の内容が編集不可 |
Scenarios | 「What-If分析」用のシナリオが編集不可 |
UserInterfaceOnly | ユーザー操作だけでなくマクロからも変更不可 |
AllowFormatting* 系 | セル・列・行の書式変更、挿入・削除、並び替え、フィルターなどすべて禁止状態 |
これらのうち、一部を許可するには以下のようにオプション的なものをつけます。
Sub ProtectSheetAllowFormatAndSort()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' ワークシートを保護
' ただし書式変更・列・行幅の調整・並び替えは許可する
ws.Protect Password:="pass", _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True, _
AllowFormattingRows:=True, _
AllowSorting:=True
End Sub
これらのオプションは、公式ドキュメントを参照して確認してみてください。
まとめ
今回ご紹介した内容を振り返ります。
- ブック・シートは明示的に指定する
- Workbook/Worksheet コレクションを使いこなす
- ブックの新規作成と保存の基本と安全策
- シートの保護・解除
まずはこれらをしっかりと理解し、安全なブック・シート操作ができるようにしていきましょう。
本ブログではこのほかにもVBAに関する記事を執筆しています。
https://tabigrammer.com/tag/vba
合わせてご覧いただければと思います!
コメント