HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > ワークシートの保護を設定・解除する

即効テクニック

シート操作関連のテクニック

ワークシートの保護を設定・解除する

( - )
他のユーザーにシートをいじられては困る、という場合はシートを保護して変更禁止にしてしまいましょう。

サンプルでは、シート1が保護されているかどうかを確認して、保護されていない場合はパスワード付きで保護し、保護されている場合は、マクロからであればシート内容を変更できる確認をするか、もしくは保護の解除をしています。 

保護を設定する場合は、画面上ではシートの内容を変更できないけれど、マクロでは変更可能という設定をしています。ですから、サンプルマクロを実行してシート1が保護されている場合は、マクロでセル”A1”に”TEST”と入力してみるか、保護を解除するか、どちらかを選択するようにメッセージボックスを表示して促します。 

手動でのシートの保護は、[ツール]−[保護]−[シートの保護]です。 解除は、[ツール]−[保護]−[シートの保護の解除]です。保護されたシートを変更しようとすると、「変更しようとしているセルまたはグラフは保護されているため、読み取り専用となっています」というメッセージが表示されます。 

●準備● 

新規ブックにサンプルマクロを貼り付けてください。 
●サンプル●
Sub Sample() 

    Dim myMsg As String, myStyle As String, myTitle As String, Answer As String

    Application.Worksheets(1).Activate 

    '<シートが保護されているかどうか表示します。> 
    MsgBox "シート1の保護非保護:" & ActiveSheet.ProtectContents '←(1) 

    '<シートが保護されていない場合> 
    If ActiveSheet.ProtectContents = False Then 
    '<シートの保護を設定します。> '←(2) 
    ActiveSheet.Protect password:="VBASample", _ 
      DrawingObjects:=True, _ 
      contents:=True, _ 
      Scenarios:=False, _ 
      userinterfaceonly:=True 
      MsgBox "シートを保護しました。" & Chr(13) & _ 
                      "シート内容が変更できない事を確認してください。" 
    Else 
    '<シートが保護されている場合、マクロでシート内容を変更してみるか 
    'シートの保護を解除するかのメッセージを表示します。> 
    '<メッセージを定義します。> 
    myMsg = "マクロでシート内容を変更しますか?" & Chr(13) & Chr(13) & _ 
                      "マクロでシート内容を変更する場合は[はい]を、" & Chr(13) & _ 
                      "シートの保護を解除する場合は[いいえ]をクリックしてください。" 
    '<ボタンを定義します。> 
    myStyle = vbYesNo + vbQuestion 
    '<タイトルを定義します。> 
    myTitle = "シートの保護" 
    '<メッセージを表示します。> 
    Answer = MsgBox(myMsg, myStyle, myTitle) 
    If Answer = vbYes Then 
    '<[はい] がクリックされた場合、マクロでシート内容を変更します。> 
      ActiveSheet.Range("A1") = "TEST" 
    Else 
    '<[いいえ] がクリックされた場合、シートの保護を解除します。> 
    ActiveSheet.Unprotect password:="VBASample" '←(3) 
    End If 

  End If 

End Sub 
●補足説明●
  1. ProtectContentsプロパティは、シートが保護されている場合はTrueを、保護されていない場合はFalseを返します。
  2. Protectメソッドは、対象オブジェクトを保護して変更を禁止します。 <構文> object.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly) Password:省略可。パスワード文字列(Variant)を指定します。省略するとパスワードの使用無しで保護解除できます。パスワードは大文字小文字を区別します。パスワードを忘れてしまわないように注意! DrawingObjects:省略可。ワークシート上の描画オブジェクトを保護する場合、Trueを設定します。規定値はFalseです。 Contents:省略可。グラフの場合はグラフ全体、ワークシートの場合はセルを保護させるには、Trueを指定します。既定値はTrueです。 Scenarios:省略可。シナリオを保護するには、True を指定します。 既定値は True です。 UserInterfaceOnly:省略可。Trueを指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されません。 この引数を省略すると、マクロからも、画面上も変更することができなくなります。
  3. Unprotectメソッドは、シートの保護を解除します。