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

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(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