【Excel VBA】ワークシートをパスワードで保護・保護解除する方法

数式や重要なデータが入力されているシートを、ユーザーに誤って変更されないように保護したい、という場面はよくあります。VBAを使えば、シートの保護と、その解除を自動的に行うことができます。

この記事では、ワークシートをパスワード付きで保護する.Protectメソッドと、保護を解除する.Unprotectメソッドの基本的な使い方、そしてマクロ実行の邪魔にならない保護の方法という応用テクニックまでを解説します。


目次

ワークシートを保護する方法 (.Protect)

.Protectメソッドは、指定したワークシートを保護し、セルの編集などを制限します。

コードと解説

Sub ProtectSheetWithPassword()

    ' 変数を宣言します
    Dim targetSheet As Worksheet
    Dim sheetPassword As String
    
    ' 保護したいシートとパスワードを設定
    Set targetSheet = ThisWorkbook.Worksheets("Report")
    sheetPassword = "p@ssw0rd"

    ' --- シートをパスワード付きで保護 ---
    targetSheet.Protect Password:=sheetPassword

    MsgBox "「" & targetSheet.Name & "」シートを保護しました。"

End Sub
  • targetSheet.Protect: 対象のシートを保護します。
  • Password:=sheetPassword: 保護を解除する際に必要となるパスワードを指定します。この引数を省略すると、パスワードなしで保護されます。

【応用】マクロからは編集可能にする保護方法

シートを保護すると、通常はVBAマクロからのセル編集もブロックされてしまいます。しかし、.Protectメソッドの**UserInterfaceOnly引数Trueに設定すると、「ユーザーによる手作業の編集は禁止するが、VBAマクロによる編集は許可する」**という、非常に便利な保護状態にできます。

Sub ProtectSheet_ForMacro()

    Dim targetSheet As Worksheet
    Set targetSheet = ThisWorkbook.Worksheets("Report")

    ' UserInterfaceOnly:=True を指定して保護
    targetSheet.Protect Password:="p@ssw0rd", UserInterfaceOnly:=True

    MsgBox "シートを保護しました。(マクロによる編集は可能です)"
    
    ' 保護したままでも、マクロからは書き込みができる
    targetSheet.Range("A1").Value = "マクロからの書き込みテスト"

End Sub

この方法を使えば、シートの保護をいちいち解除・再設定することなく、マクロ処理を実行できるため、コードがシンプルになり、処理速度も向上します。


ワークシートの保護を解除する方法 (.Unprotect)

.Unprotectメソッドは、保護されたワークシートを編集可能な状態に戻します。

コードと解説

Sub UnprotectSheetWithPassword()

    ' 変数を宣言します
    Dim targetSheet As Worksheet
    Dim sheetPassword As String
    
    ' 保護解除したいシートとパスワードを設定
    Set targetSheet = ThisWorkbook.Worksheets("Report")
    sheetPassword = "p@ssw0rd" ' 保護時に設定したパスワードと一致させる

    ' --- パスワードを指定してシートの保護を解除 ---
    targetSheet.Unprotect Password:=sheetPassword

    MsgBox "「" & targetSheet.Name & "」シートの保護を解除しました。"

End Sub
  • targetSheet.Unprotect: 対象シートの保護を解除します。
  • Password:=sheetPassword: 保護時に設定されたパスワードを指定します。パスワードが間違っていると、エラーが発生します。

まとめ

シートの保護と解除は、2つのシンプルなメソッドで実行できます。

  • 保護する: mySheet.Protect Password:="パスワード"
  • 保護を解除する: mySheet.Unprotect Password:="パスワード"

そして、マクロを運用する上で最も重要なテクニックは、UserInterfaceOnly:=True引数です。 mySheet.Protect Password:="パスワード", UserInterfaceOnly:=True これにより、ユーザーの誤操作は防ぎつつ、マクロの利便性は損なわない、という理想的な状態を作り出すことができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次