すべてのシートの保護を一括で設定/解除する方法を解説します。
すべてのシートの保護を一括で設定/解除する
Sub すべてのシートを一括で保護する() Dim シート As Worksheet For Each シート In ThisWorkbook.Worksheets ' 例:書式変更だけは許可して他をロック シート.Protect _ AllowFormattingCells:=True, _ AllowFormattingColumns:=True, _ AllowFormattingRows:=True Next End Sub
Sub すべてのシートの保護を一括で解除する() Dim シート As Worksheet For Each シート In Thisworkbook.Worksheets シート.Unprotect Next End Sub
保護の解除は特に引数はなくシンプルですが、
設定については許可する操作を選択する必要があります。
とりあえず「すべての設定を許可するコード」を置いておきますので、
禁止したい操作を消してご利用ください。
Sub すべてのシートを一括で保護する() Dim シート As Worksheet For Each シート In ThisWorkbook.Worksheets ' 禁止する操作を消してご利用ください。 シート.Protect, _ Password:="xxx", _ AllowFormattingCells:=True, _ AllowFormattingColumns:=True, _ AllowFormattingRows:=True, _ AllowInsertingColumns:=True, _ AllowInsertingRows:=True, _ AllowInsertingHyperlinks:=True, _ AllowDeletingColumns:=True, _ AllowDeletingRows:=True, _ AllowSorting:=True, _ AllowFiltering:=True, _ AllowUsingPivotTables:=True, _ DrawingObjects:=False, _ Scenarios:=False Next End Sub

| ダイアログの表示 | 引数名 | 規定値 |
|---|---|---|
| パスワード | Password | |
| ロックされたセル範囲の選択 | 別プロパティ(後述) | |
| ロックされていないセル範囲の選択 | 別プロパティ(後述) | |
| セルの書式設定 | AllowFormattingCells | False |
| 列の書式設定 | AllowFormattingColumns | False |
| 行の書式設定 | AllowFormattingRows | False |
| 列の挿入 | AllowInsertingColumns | False |
| 行の挿入 | AllowInsertingRows | False |
| ハイパーリンクの挿入 | AllowInsertingHyperlinks | False |
| 列の削除 | AllowDeletingColumns | False |
| 行の削除 | AllowDeletingRows | False |
| 並び替え | AllowSorting | False |
| オートフィルターの使用 | AllowFiltering | False |
| ピボットテーブル(グラフ)の使用 | AllowUsingPivotTables | False |
| オブジェクトの編集 | DrawingObjects | True |
| シナリオの編集 | Scenarios | True |
セル選択の許可設定については専用のコードが必要です。
詳しくはこちらのページをご覧ください。
シートの保護 - セル選択の制限について
現在の保護設定と同じ設定でシートを保護
シートの保護設定は保護を解除しても記憶されており、
以下のコードで「前回と同じ設定でシートを保護」することが出来ます。
Sub すべてのシートを前回と同じ設定で保護する() Dim シート As Worksheet For Each シート In ThisWorkbook.Worksheets シート.Protect , _ AllowFormattingCells:=シート.Protection.AllowFormattingCells, _ AllowFormattingColumns:=シート.Protection.AllowFormattingColumns, _ AllowFormattingRows:=シート.Protection.AllowFormattingRows, _ AllowInsertingColumns:=シート.Protection.AllowInsertingColumns, _ AllowInsertingRows:=シート.Protection.AllowInsertingRows, _ AllowInsertingHyperlinks:=シート.Protection.AllowInsertingHyperlinks, _ AllowDeletingColumns:=シート.Protection.AllowDeletingColumns, _ AllowDeletingRows:=シート.Protection.AllowDeletingRows, _ AllowSorting:=シート.Protection.AllowSorting, _ AllowFiltering:=シート.Protection.AllowFiltering, _ AllowUsingPivotTables:=シート.Protection.AllowUsingPivotTables, _ DrawingObjects:=シート.ProtectDrawingObjects, _ Scenarios:=シート.ProtectScenarios シート.EnableSelection = シート.EnableSelection Next End Sub
一つ一つのプロパティを代入し直しているため長たらしいですが、
コード自体は単純なコードです。
細かい引数は特に理解する必要はないと思いますので、
このままコピペで使っていただいてOKです。
汎用関数化
この手の「簡単だけど面倒なコード」は汎用関数にしておきましょう。
Sub すべてのシートを前回と同じ設定で保護する(対象ブック As Workbook) Dim シート As Worksheet For Each シート In 対象ブック.Worksheets シート.Protect , _ AllowFormattingCells:=シート.Protection.AllowFormattingCells, _ AllowFormattingColumns:=シート.Protection.AllowFormattingColumns, _ AllowFormattingRows:=シート.Protection.AllowFormattingRows, _ AllowInsertingColumns:=シート.Protection.AllowInsertingColumns, _ AllowInsertingRows:=シート.Protection.AllowInsertingRows, _ AllowInsertingHyperlinks:=シート.Protection.AllowInsertingHyperlinks, _ AllowDeletingColumns:=シート.Protection.AllowDeletingColumns, _ AllowDeletingRows:=シート.Protection.AllowDeletingRows, _ AllowSorting:=シート.Protection.AllowSorting, _ AllowFiltering:=シート.Protection.AllowFiltering, _ AllowUsingPivotTables:=シート.Protection.AllowUsingPivotTables, _ DrawingObjects:=シート.ProtectDrawingObjects, _ Scenarios:=シート.ProtectScenarios シート.EnableSelection = シート.EnableSelection Next End Sub Sub すべてのシートの保護を一括で解除する(対象ブック As Workbook) Dim シート As Worksheet For Each シート In 対象ブック.Worksheets シート.Unprotect Next End Sub
' 使用例 Call すべてのシートの保護を一括で解除する(ThisWorkbook) ' ここにブックを加工する処理 Call すべてのシートを前回と同じ設定で保護する(ThisWorkbook)
使用例の通り、メインロジックが劇的に読みやすくなりますね。
このように「簡単だけど書くのが面倒なコード」は、
関数化が簡単な割に、汎用関数にするメリットが大きいです。
汎用関数集を作っている方は、ぜひそのメンバーに加えてあげてください。
汎用関数集の作り方・使い方についてはこちらをどうぞ。