\ お問い合わせはこちら /

【VBA】Workbook/Worksheetオブジェクトを使ったブック・シートの安全な操作のコツ

VBAでは、WorkbookWorksheetオブジェクトの扱い方がコードの安定性と信頼性に直結します。

この記事では、操作を安全かつ明確にするための考え方を厳選して解説します。

ブック・シート操作:Workbook/Worksheetオブジェクトの管理と安全な操作

1. ブック・シートは明示的に指定する

VBAでは、ActiveSheet, ActiveWorkbookの多用を避けるべきです。

なぜなら、予期せぬシートやブックが選択されてバグの温床になるから。

その代わりに、明示する方法が安全です。

VB
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コレクションには、現在開いているすべてのブックが含まれています。

VB
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コレクションにはブック内の全シートが入っています。

VB
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: 上書き

サンプルコードを示すと、以下の通り。

VB
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. シートの保護・解除

シートの誤操作から守ため、シート保護を活用しましょう。

VB
Sub ProtectSheetWithDefaults()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' シートを保護
    ws.Protect

End Sub

これにより、以下のような挙動になります。

引数名保護内容・説明
DrawingObjects図形やシェイプの編集が不可
Contentsロックされたセル(Locked = True)の内容が編集不可
Scenarios「What-If分析」用のシナリオが編集不可
UserInterfaceOnlyユーザー操作だけでなくマクロからも変更不可
AllowFormatting*セル・列・行の書式変更、挿入・削除、並び替え、フィルターなどすべて禁止状態

これらのうち、一部を許可するには以下のようにオプション的なものをつけます。

VB
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

合わせてご覧いただければと思います!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして。旅行をこよなく愛するITエンジニアのNommyです。
これまでUberEatsの配達員、金融業界、ミステリーショッパーなど色々なお仕事を経験してきました。
本ブログでは僕が経験してきたことなどを執筆していきます。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)