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” |
DrawingObjects | True又は False | グラフの場合はグラフ全体、 ワークシートの場合は ロックされているセル | DrawingObjects:=True |
Contents | True又は False | グラフ等のコンテンツを保護 | Contents:=True |
Scenarios | True又は False | シナリオの編集 | Scenarios:=True |
UserInterfaceOnly | True又は False | True を指定すると、 画面上からの変更は 保護されますが、 マクロからの変更は 保護されません。 この引数を省略すると、 マクロからも、画面上からも 変更することが できなくなります。 | UserInterfaceOnly:=True |
AllowFormattingCells | True又は False | セルの書式設定 | AllowFormattingCells:=True |
AllowFormattingColumns | True又は False | 列の書式設定 | AllowFormattingColumns:=True |
AllowFormattingRows | True又は False | 行の書式設定 | AllowFormattingRows:=True |
AllowInsertingColumns | True又は False | 列の挿入 | AllowInsertingColumns:=True |
AllowInsertingRows | True又は False | 行の挿入 | AllowInsertingRows:=True |
AllowInsertingHyperlinks | True又は False | ハイパーリンクの挿入 | AllowInsertingHyperlinks:=True |
AllowDeletingColumns | True又は False | 列の削除 | AllowDeletingColumns:=True |
AllowDeletingRows | True又は False | 行の削除 | AllowDeletingRows:=True |
AllowSorting | True又は False | 並べ替え | AllowSorting:=True |
AllowFiltering | True又は False | オートフィルターの使用 | AllowFiltering:=True |
AllowUsingPivotTables | True又は 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シートの保護と解除を柔軟に行うことができます。
保護の詳細なオプションを使用して、シートの内容を適切に保護しましょう。