📊 Excel VBA Top100
📋

UnprotectSheet

シート管理

シートの保護を解除する

パスワードで保護されたワークシートをVBAで解除するマクロです。Worksheet.UnprotectメソッドにPasswordパラメータを指定することで、プログラムから保護を解除してデータの更新や書式変更が可能になります。複数シートの保護を一括解除したり、処理前に解除→処理後に再保護という自動化フローの一部として組み込むことができます。パスワード管理には十分なセキュリティ対策が必要です。内部ではUnprotectメソッドにパスワードを渡すだけのシンプルな処理ですが、ProtectSheetとセットで「解除→更新処理→再保護」という一連のマクロフローに組み込むのが典型的な使い方です。パスワード管理をコード直書きではなく設定ファイルや暗号化ストレージに分離することで、セキュリティと自動化を両立できます。

UnprotectSheet デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとシート名とパスワード(設定されている場合)を入力するダイアログが表示される

🎯 活用シーン

  • ✓マクロによる自動更新前にシート保護を一時解除して処理後に再保護
  • ✓月末バッチ処理で複数の保護シートを一括解除してデータ更新
  • ✓管理者権限でのみ使用できる一括解除ツールとして提供
  • ✓月次バッチ処理で保護済みの複数シートを一時的に解除し、数値更新後に自動で再保護したいとき
  • ✓管理者のみが実行できる一括メンテナンスツールとして、保護解除機能を組み込みたいとき

💡 実装のヒント

  • ▸パスワードは定数や環境変数で管理してコード内に直書きしないようにします
  • ▸解除後の処理が完了したら必ずProtectで再保護します
  • ▸On Errorでパスワードが違う場合のエラーを適切にハンドリングします
  • ▸パスワードが誤っている場合はランタイムエラーになるため、On Errorで捕捉しユーザーに分かりやすいメッセージを表示してください。
  • ▸複数シートを一括解除したい場合は、パスワードが共通であることを前提にループ処理を組むと効率的です。

💻 VBAコード

' UnprotectSheet
' -----------------
' Macro Name: UnprotectSheet
' Description: シートの保護を解除する
' Parameters: なし
' Returns: なし
' Usage: 実行するとシート名とパスワード(設定されている場合)を入力するダイアログが表示される
' -----------------

Sub UnprotectSheet()
    Dim ws As Worksheet
    Dim sheetName As String
    Dim password As String

    On Error GoTo ErrorHandler

    sheetName = InputBox("保護を解除するシート名を入力:", "シート保護解除", ActiveSheet.Name)

    If sheetName = "" Then
        Exit Sub
    End If

    On Error Resume Next
    Set ws = Worksheets(sheetName)
    On Error GoTo ErrorHandler

    If ws Is Nothing Then
        MsgBox "「" & sheetName & "」は存在しません。", vbExclamation
        Exit Sub
    End If

    If Not ws.ProtectContents Then
        MsgBox "「" & sheetName & "」は保護されていません。", vbInformation
        Exit Sub
    End If

    password = InputBox("パスワードを入力:", "シート保護解除")

    On Error Resume Next
    ws.Unprotect Password:=password
    On Error GoTo ErrorHandler

    If ws.ProtectContents Then
        MsgBox "パスワードが正しくありません。", vbExclamation
    Else
        MsgBox "「" & sheetName & "」の保護を解除しました。", vbInformation
    End If
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub