VBAでシートの保護方法

投稿日: 2024年6月6日

VBAでExcelシートを保護する方法について詳しく説明します。
シート保護を行うことで、ユーザーが誤ってシートの内容を変更するのを防ぐことができます。

シートの保護方法

シートを保護するためには、Protectメソッドを使用します。このメソッドには様々なオプションがあり、必要に応じて保護のレベルや特定の操作を許可することができます。

基本的なシート保護

Sub ProtectSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Protect
End Sub

このコードは、Sheet1を基本的に保護します。

パスワード付きのシート保護

Sub ProtectSheetWithPassword()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Protect Password:="yourpassword"
End Sub

このコードは、Sheet1をパスワード「yourpassword」で保護します。
Protectメソッドにはパスワードロック以外にも細かく設定許可や保護することができます。以下は構文です。

Protectメソッドの構文

Protect (Password
DrawingObjects
Contents
Scenarios
UserInterfaceOnly
AllowFormattingCells
AllowFormattingColumns
AllowFormattingRows
AllowInsertingColumns
AllowInsertingRows
AllowInsertingHyperlinks
AllowDeletingColumns
AllowDeletingRows
AllowSorting、
AllowFiltering
AllowUsingPivotTabless)

項目設定値許可内容
Password文字列パスワード文字列を指定Password:=”yourpassword”
DrawingObjectsTrue又は
False
グラフの場合はグラフ全体、
ワークシートの場合は
ロックされているセル
DrawingObjects:=True
ContentsTrue又は
False
グラフ等のコンテンツを保護Contents:=True
ScenariosTrue又は
False
シナリオの編集Scenarios:=True
UserInterfaceOnlyTrue又は
False
True を指定すると、
画面上からの変更は
保護されますが、
マクロからの変更は
保護されません。
この引数を省略すると、
マクロからも、画面上からも
変更することが
できなくなります。
UserInterfaceOnly:=True
AllowFormattingCellsTrue又は
False
セルの書式設定AllowFormattingCells:=True
AllowFormattingColumnsTrue又は
False
列の書式設定AllowFormattingColumns:=True
AllowFormattingRowsTrue又は
False
行の書式設定AllowFormattingRows:=True
AllowInsertingColumnsTrue又は
False
列の挿入AllowInsertingColumns:=True
AllowInsertingRowsTrue又は
False
行の挿入AllowInsertingRows:=True
AllowInsertingHyperlinksTrue又は
False
ハイパーリンクの挿入AllowInsertingHyperlinks:=True
AllowDeletingColumnsTrue又は
False
列の削除AllowDeletingColumns:=True
AllowDeletingRowsTrue又は
False
行の削除AllowDeletingRows:=True
AllowSortingTrue又は
False
並べ替えAllowSorting:=True
AllowFilteringTrue又は
False
オートフィルターの使用AllowFiltering:=True
AllowUsingPivotTablesTrue又は
False
ピボットテーブルと
ピボットグラフ
AllowUsingPivotTables:=True

上記の内容を使用して特定の操作を許可することができます。
これはExcelの「校閲」タブにある「シートの保護」にあるないようと同じです。

特定の操作を許可するシート保護

Sub ProtectSheetWithOptions()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Protect Password:="yourpassword", AllowFormattingCells:=True, AllowInsertingRows:=True
End Sub

このコードは、シートをパスワード「yourpassword」で保護し、セルの書式設定と行の挿入を許可します。

シートの保護解除方法

シートの保護を解除するためには、Unprotectメソッドを使用します。保護を解除する際には、保護時に設定したパスワードを指定する必要があります。

基本的なシート保護解除

Sub UnprotectSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Unprotect
End Sub

このコードは、Sheet1の保護を解除します(パスワードが設定されていない場合)。

パスワード付きのシート保護解除

Sub UnprotectSheetWithPassword()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Unprotect Password:="yourpassword"
End Sub

このコードは、パスワード「yourpassword」でSheet1の保護を解除します。

ワークシートの保護状態を確認する方法

シートが保護されているかどうかを確認するには、ProtectContentsプロパティを使用します。

Sub CheckSheetProtection()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    If ws.ProtectContents Then
        MsgBox "Sheet is protected"
    Else
        MsgBox "Sheet is not protected"
    End If
End Sub

複数のシートを一括で保護・解除する方法

複数のシートを一括で保護・解除するには、ループを使用します。

複数のシートを一括で保護する

Sub ProtectAllSheets()
    Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Sheets
        ws.Protect Password:="yourpassword"
    Next ws
End Sub

複数のシートを一括で保護解除する

Sub UnprotectAllSheets()
    Dim ws As Worksheet
    
    For Each ws In ThisWorkbook.Sheets
        ws.Unprotect Password:="yourpassword"
    Next ws
End Sub

これらの方法を組み合わせることで、VBAを使用してExcelシートの保護と解除を柔軟に行うことができます。
保護の詳細なオプションを使用して、シートの内容を適切に保護しましょう。

記事