Excel VBAでパスワードを設定する方法をお探しですね。
広告
Excel VBAでシート保護・ブック保護を扱う方法【実務で使える解除・再保護のコード付き】
Excelで入力用のシートや集計用のブックを配布するとき、「うっかり数式を消されちゃった…」「シートの順番が変わってる!」なんてトラブル、経験ありませんか?
こういうミスを防ぐために、Excelには「シート保護」や「ブック保護」という機能があります。
でも、VBAで自動処理をする場合、保護がかかったままだとセルの更新やシートの追加ができず、エラーになってしまうんです。
この記事では、**Excel VBAでシート保護・ブックのパスワードを設定する方法**と、**マクロから一時的に保護を解除して、編集後にまた保護をかけ直す**実務的な書き方を解説します。
なお、ここで紹介するのは「自分が管理しているブックを安全に運用する方法」です。
パスワードがわからないファイルを強制的に解除する方法ではないので、ご注意ください。
Excelの「保護」って、実は3種類あるんです
Excelの保護機能、意外と種類があって混乱しやすいんですよね。
まずは基本をおさえておきましょう。
①シートの保護
セルの編集、行や列の挿入、書式変更、図形の編集などを制限する機能です。
「このセルは触らないでね」という設定ができます。
②ブック構造の保護
シートの追加・削除・移動・名前変更・表示/非表示の変更など、ブック全体の構成に関わる操作を制限します。
③ファイルを開くためのパスワード
ブック自体を暗号化する機能です。
正しいパスワードがないと、そもそもファイルを開けません。
VBAで扱いやすいのは、**①シート保護**と**②ブック構造の保護**です。
これらは`Protect`メソッドで保護をかけて、`Unprotect`メソッドで解除できます。
ただし、解除するには設定したときのパスワードが必要です。
パスワードを忘れたらどうなる?
残念ながら、最近のExcel(Microsoft 365など)で暗号化されたブックは、VBAだけで復元することはできません。
ネット上には「内部ファイルを書き換える方法」や「総当たりで解除する方法」なども紹介されていますが、ファイルが壊れるリスクがありますし、他人のファイルに使えば不正アクセスになる可能性もあります。
実務では、**「保護をかける」→「必要な処理の間だけ解除する」→「処理後に必ず再保護する」**という流れを作るのが基本です。
また、Excelの保護機能は「誤操作を防ぐ」のが主な目的で、完全なセキュリティ対策ではありません。
本当に重要な情報を守りたい場合は、ファイルを開くパスワード、アクセス権限、OneDriveやSharePointの共有設定、バックアップなども組み合わせて考えましょう。
VBAでシート保護のパスワードを設定してみよう
シートを保護する基本的なコードは、とってもシンプルです。
対象のシートに対して`Protect`メソッドを実行するだけ。
たとえば、今開いているシート(アクティブシート)にパスワードをかけて保護する場合は、こんな感じです。
“`vba
Sub SheetProtectBasic()
ActiveSheet.Protect Password:=”pass123″
End Sub
“`
パスワードは例として`”pass123″`を使っていますが、実際にはもっと推測されにくい文字列にしてくださいね。
このコードを実行すると、アクティブシートが保護されて、ロックされたセルは編集できなくなります。
セルの「ロック」って何?
Excelでは、初期状態でほとんどのセルが「ロック済み」になっています。
ただし、このロック設定は**シートを保護して初めて有効**になるんです。
つまり、「入力欄だけ編集できるようにしたい」という場合は、保護をかける前に入力範囲のロックを解除しておく必要があります。
入力欄だけ編集可能にする方法
たとえば、B2:B10だけを入力可能にして、それ以外を保護したい場合は、次のようにします。
“`vba
Sub ProtectWithInputArea()
Dim ws As Worksheet
Set ws = Worksheets(“入力シート”)
‘ いったん保護を解除
ws.Unprotect Password:=”pass123″
‘ シート全体をロックしてから、入力範囲だけロック解除
ws.Cells.Locked = True
ws.Range(“B2:B10″).Locked = False
‘ 保護をかけ直す(フィルターと並べ替えは許可)
ws.Protect Password:=”pass123”, _
AllowFiltering:=True, _
AllowSorting:=True
End Sub
“`
`AllowFiltering:=True`を指定すると、保護中でもオートフィルターが使えます。
`AllowSorting:=True`を指定すると並べ替えも許可できますが、ロックされたセルが含まれていると思ったように動かないこともあります。
保護中に何を許可するかは、使う人の作業内容に合わせて決めるのがポイントです。
行や列の挿入、書式設定、ピボットテーブル操作、図形の編集なども細かく制御できますが、許可しすぎると保護の意味が薄くなっちゃいます。
マクロからは編集したいけど、ユーザーには触らせたくない場合
こんなときは`UserInterfaceOnly:=True`が便利です。
これは「ユーザー操作では保護を有効にしつつ、VBAからの編集は許可する」という指定です。
ただし、この設定はブックを閉じると消えてしまうので、ブックを開いたタイミングで再設定するのがコツです。
“`vba
Private Sub Workbook_Open()
Worksheets(“入力シート”).Protect Password:=”pass123″, _
UserInterfaceOnly:=True, _
AllowFiltering:=True
End Sub
“`
このコードは、VBEの「ThisWorkbook」モジュールに書きます。
ブックを開いたときに自動で実行されて、保護されたシートに対してもマクロ処理がしやすくなります。
いちいち保護を解除→再保護する方法に比べて、処理中に保護が外れた状態を短くできるので、運用上も扱いやすい方法です。
VBAでブック保護・ファイルのパスワードを設定する方法
ブックの保護には、主に「構造の保護」と「ファイルを開くパスワード」があります。
ブック構造の保護
シートの追加や削除、移動、名前変更、表示・非表示の変更を防ぎたいときに使います。
VBAでは`ThisWorkbook.Protect`を使って設定します。
セル内の編集を制限するものではないので、シート保護とは目的が違うんですね。
“`vba
Sub ProtectWorkbookStructure()
ThisWorkbook.Protect Password:=”bookpass”, Structure:=True
End Sub
“`
解除する場合は、同じパスワードを指定して`Unprotect`を実行します。
“`vba
Sub UnprotectWorkbookStructure()
ThisWorkbook.Unprotect Password:=”bookpass”
End Sub
“`
構造保護がかかったままだと、マクロでシートを追加・削除・移動しようとしたときにエラーになることがあります。
そのため、シート構成を変更するマクロでは、一時的にブック保護を解除して、処理後に再保護する設計が必要です。
ファイルを開くためのパスワード
ファイルを開くためのパスワードをVBAで設定したい場合は、`SaveAs`メソッドの`Password`引数を使います。
これはブックを保存し直す処理になるので、既存ファイルを上書きするのか、別名で保存するのかを慎重に決めてください。
“`vba
Sub SaveWorkbookWithOpenPassword()
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & “\保護済みブック.xlsx”, _
FileFormat:=xlOpenXMLWorkbook, _
Password:=”openpass”
End Sub
“`
書き込みパスワード(読み取り専用の推奨)
読み取り専用を推奨する書き込みパスワードを設定したい場合は、`WriteResPassword`を使います。
“`vba
Sub SaveWorkbookWithWritePassword()
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & “\書込制限ブック.xlsx”, _
FileFormat:=xlOpenXMLWorkbook, _
WriteResPassword:=”writepass”, _
ReadOnlyRecommended:=True
End Sub
“`
`Password`は開くためのパスワード、`WriteResPassword`は編集保存を制限するためのパスワードです。
ただし、書き込みパスワードは暗号化による完全な閲覧制限ではなく、編集運用を制御する意味合いが強い点に注意してください。
パスワードをコードに書くのは危険?
実務では、パスワードをVBAコード内に直接書くと、VBEを開ける人に見られる可能性があります。
VBAプロジェクトにもパスワードを設定できますが、これも強固な秘密管理の仕組みではありません。
機密性が高いパスワードは、コードにベタ書きせず、管理者だけが扱える設定ファイルや社内の安全な保管ルールと組み合わせて運用することをおすすめします。
マクロから保護を解除→編集→再保護する実務コード
保護されたシートやブックをマクロで編集する場合は、「解除」→「編集」→「再保護」をひとまとまりの処理として書くのが基本です。
重要なのは、**途中でエラーが起きても保護が外れたまま終わらないようにすること**です。
そのため、エラー処理を入れて、最後に必ず再保護する構成にします。
シート保護の例
次の例では、シート保護を解除してA1に更新日時を入力し、最後に再度保護しています。
“`vba
Sub EditProtectedSheetSafely()
Dim ws As Worksheet
Const PW As String = “pass123”
Set ws = Worksheets(“入力シート”)
On Error GoTo ErrHandler
‘ 保護を解除
ws.Unprotect Password:=PW
‘ 編集処理
ws.Range(“A1”).Value = “更新日時:” & Format(Now, “yyyy/mm/dd hh:nn:ss”)
ws.Range(“B2:B10”).ClearContents
ExitHandler:
‘ 必ず再保護
ws.Protect Password:=PW, _
AllowFiltering:=True, _
UserInterfaceOnly:=True
Exit Sub
ErrHandler:
MsgBox “処理中にエラーが発生しました。
” & vbCrLf & Err.Description, vbExclamation
Resume ExitHandler
End Sub
“`
こう書いておくと、処理中にエラーが起きた場合でも`ExitHandler`に進んで、シートを再保護できます。
単純なマクロでは`Unprotect`と`Protect`だけでも動きますが、業務用ファイルでは予期しないエラーが起きる前提で作ることが大切です。
たとえば、対象シート名が変更された、入力範囲が削除された、ブックが読み取り専用で開かれている、といった理由で処理が止まることがあります。
ブック構造保護の例
ブック構造の保護も同じ考え方で扱えます。
シートを追加する処理では、先にブック保護を解除して、追加後に再保護します。
“`vba
Sub AddSheetWithWorkbookProtection()
Const PW As String = “bookpass”
Dim wsNew As Worksheet
On Error GoTo ErrHandler
‘ ブック保護を解除
ThisWorkbook.Unprotect Password:=PW
‘ シートを追加
Set wsNew = Worksheets.Add(After:=Worksheets(Worksheets.Count))
wsNew.Name = “作業_” & Format(Now, “yyyymmdd_hhnnss”)
ExitHandler:
‘ 必ず再保護
ThisWorkbook.Protect Password:=PW, Structure:=True
Exit Sub
ErrHandler:
MsgBox “シート追加に失敗しました。
” & vbCrLf & Err.Description, vbExclamation
Resume ExitHandler
End Sub
“`
複数シートをまとめて保護する
複数シートをまとめて保護したい場合は、`Worksheets`をループ処理します。
“`vba
Sub ProtectAllSheets()
Dim ws As Worksheet
Const PW As String = “pass123”
For Each ws In ThisWorkbook.Worksheets
ws.Protect Password:=PW, _
AllowFiltering:=True, _
UserInterfaceOnly:=True
Next ws
End Sub
“`
ただし、すべてのシートに同じ許可設定を適用してよいとは限りません。
入力用シート、集計用シート、マスタシートでは、許可すべき操作が異なることがあります。
最初は全シート一括保護で作って、運用が固まってきたらシートごとに設定を分けると管理しやすくなります。
パスワード管理とバックアップは必ずセットで!
最後に大事なことを。
**パスワード管理とバックアップは必ずセットで考えてください。
**
シート保護やブック構造保護のパスワードを忘れると、通常の操作では解除できません。
ファイルを開くためのパスワードを忘れた場合は、Excel標準機能やVBAで復元できないケースが一般的です。
業務ファイルでは、次のような対策を用意しておくと、トラブル時の影響を小さくできます。
– 管理者用のパスワード保管ルール
– 変更履歴の記録
– 定期的なバックアップ
– 編集権限の分離
まとめ
Excel VBAでシート保護・ブックのパスワードを設定したり、マクロから解除して編集したりする場合は、「とりあえずコードが動けばOK」という考え方では不十分です。
– どの保護が何を制限するのかを理解する
– 正しいパスワードを使って安全に解除する
– 処理後に確実に再保護する
この3つが重要です。
入力ミスを防ぎながら自動化の便利さも保つには、セルのロック設定、保護オプション、エラー処理、パスワード管理を一体で設計することが、安定したExcel運用につながります。
ぜひ、この記事を参考に、安全で使いやすいExcelファイルを作ってみてくださいね!
広告
