トップ > 汎用コード > 全ワークシートを一括保護・保護解除

全ワークシートを一括保護・保護解除2023.07.28 [更新日]2026.04.12

アクティブブックの全ワークシートを一括で保護・保護解除するマクロです。

サンプルコードを実行すると、アクティブブックの全ワークシートを対象に保護・保護解除する処理が実行されます。
シートを保護するか、保護解除するかは、コード内の定数(赤字部)で設定します。またシートの保護や保護解除にパスワードを要する場合には、コード内の定数にパスワードを記載します。


【お薦め】マクロ・プロシージャを管理する無料のツール!
 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
ページトップへ戻る

Excel 汎用コード

Copyright(C) 2009- 坂江 保 All Rights Reserved.