全ワークシートを一括保護・保護解除2023.07.28 [更新日]2026.04.12
アクティブブックの全ワークシートを一括で保護・保護解除するマクロです。
サンプルコードを実行すると、アクティブブックの全ワークシートを対象に保護・保護解除する処理が実行されます。
シートを保護するか、保護解除するかは、コード内の定数(赤字部)で設定します。またシートの保護や保護解除にパスワードを要する場合には、コード内の定数にパスワードを記載します。
【お薦め】マクロ・プロシージャを管理する無料のツール!
Excelマクロ管理ツール
Excelマクロ管理ツール
サンプルコード
コードの貼り付け場所 VBAコードをカラーで印刷・Web掲載するためのツールはこちら
'*************************************************************** '* 対象ブックの全ワークシートをパスワード"1234"で保護 '*************************************************************** Public Sub sampleProtectAllWorksheets() On Error GoTo LBL_ERROR '------------------------------ ' 定数定義 '------------------------------ ' 保護・保護解除設定(True:保護 False:保護解除) Const PROTECT As Boolean = True ' 保護・保護解除パスワード Const PASSWORD As String = "1234" '------------------------------ ' 全ワークシートの保護・保護解除 '------------------------------ Dim varResult As Variant varResult = protectAllWorksheets(ActiveWorkbook, PROTECT, PASSWORD) '------------------------------ ' 結果表示 '------------------------------ Dim strMessage As String If IsArray(varResult) Then ' 戻り値が配列の場合はエラー有 strMessage = "次のシートでエラーが発生しました。" & vbLf & vbLf & _ Join(varResult, vbLf) Else ' 戻り値が配列でない場合は全ワークシートで処理成功 strMessage = "全てのシートでの処理に成功しました" End If MsgBox strMessage, _ vbInformation, _ IIf(PROTECT, "シートの保護", "シートの保護解除") Exit Sub '------------------------------ ' エラー処理 '------------------------------ LBL_ERROR: MsgBox "エラー番号:" & Err.Number & vbLf & _ Err.Description, vbExclamation, "エラーが発生しました" End Sub
'*************************************************************** '* 対象ブックの全ワークシートを保護・保護解除する '*-------------------------------------------------------------- '* 概要 | 指定したブックの全ワークシートを保護または保護解除する '* | 参考:https://excel.syogyoumujou.com/vba/protect_all_worksheets.html '* 引数 | 1) pWbk :対象ブック(ByRef) '* | 2) pProtect :保護・保護解除設定 '* | True :保護 '* | False:保護解除 '* | 3) pPassword:パスワード(既定:"") '* 戻り値 | Variant型 '* | 成功 :Empty '* | エラーあり:保護・保護解除エラーのシート名を格納した1次元配列 '* 作成日 | 2023.07.23 '*-------------------------------------------------------------- '* 改修履歴 | 2026.04.12 '*************************************************************** Public Function protectAllWorksheets(ByRef pWbk As Workbook, _ ByVal pProtect As Boolean, _ Optional ByVal pPassword As String = "") As Variant On Error Resume Next Dim wsh As Worksheet Dim varArray1d() As Variant Dim lngErrorCount As Long '------------------------------ ' 全ワークシートの保護・保護解除 '------------------------------ For Each wsh In pWbk.Worksheets If pProtect Then ' シートが保護されていなければシートを保護 If Not wsh.ProtectContents Then wsh.PROTECT pPassword Else ' シートが保護されていればシートの保護解除 If wsh.ProtectContents Then wsh.Unprotect pPassword End If ' エラーの場合はシート名を記録 If Err.Number <> 0 Then Err.Clear ReDim Preserve varArray1d(lngErrorCount) varArray1d(lngErrorCount) = wsh.Name lngErrorCount = lngErrorCount + 1 End If Next wsh ' エラーがあった場合は配列を戻り値に設定 If 0 < lngErrorCount Then protectAllWorksheets = varArray1d End Function