はじめに
Excelには、ワークシートを保護する機能が付いています。
ワークシートの保護では、セル値の変更、書式設定の変更、行・列の挿入や削除などの操作をできないように設定できます。
また、パスワードを指定できる他、許可する設定を個別に指定できるなど多機能です。
Execl上の操作では、「校閲」から「シートの保護」。またはシートタブを右クリックして「シートの保護」で行う事ができます。

上記にある様々なオプションをVBAから設定(または解除)する事ができます。
但し、Excelの場合、シートの保護といっても保護を解除出来てしまうので過信は禁物です。
Protectメソッドの使い方
シート保護・保護解除のメソッドは以下のようになります。
シートの保護
Worksheet.Protect (Password, Option…)
シートの保護解除
Worksheet.UnProtect (Password)
パスワードをを含め、全てのオプションは省略可能です。
シート保護・解除(パスワード無し)
パスワード無しでシートの保護・解除を行うには以下のようにします。
'パスワード無しでシート保護
Sub testProtect1()
ActiveSheet.Protect
End Sub
'パスワード無しでシート保護解除
Sub testUnprotect1()
ActiveSheet.Unprotect
End Sub
パスワード付きでシート保護・解除
'パスワード付きでシート保護
Sub testProtect2()
ActiveSheet.Protect "pass"
End Sub
'パスワード付きでシート保護解除
Sub testUnprotect2()
ActiveSheet.Unprotect "pass"
End Sub
パスワード無しの Unprotect を実行するとパスワード入力ダイアログが出てきてパスワード入力を求められます。

Protectメソッドのオプション
以下の表では、オプションのデフォルト値とデフォルト状態の時の動作を示しています。
Password以外の引数は、TRUEかFALSEを取ります。
引 数 | デフォルト値 | 説明(デフォルトの時) |
---|---|---|
Password | — | シート保護のパスワード指定 |
DrawingObjects | TRUE | オブジェクトの編集を許可しない |
Contents | TRUE | シートとロックされたセルの内容を保護 |
Scenarios | TRUE | シナリオの編集を許可しない |
UserInterfaceOnly | FALSE | ユーザ操作とマクロからシートを保護する |
AllowFormattingCells | FALSE | 「セルの書式設定」を許可しない |
AllowFormattingColumns | FALSE | 「列の書式設定」を許可しない |
AllowFormattingRows | FALSE | 「行の書式設定」を許可しない |
AllowInsertingColumns | FALSE | 「列の挿入」を許可しない |
AllowInsertingRows | FALSE | 「行の挿入」を許可しない |
AllowInsertingHyperlinks | FALSE | 「ハイパーリンクの挿入」を許可しない |
AllowDeletingColumns | FALSE | 「列の削除」を許可しない |
AllowDeletingRows | FALSE | 「行の削除」を許可しない |
AllowSorting | FALSE | 「並べ替え」を許可しない |
AllowFiltering | FALSE | 「オートフィルタの使用」を許可しない |
AllowUsingPivotTables | FALSE | 「ピボットテーブルとピボットグラフの使用」を許可しない |
オプション指定のサンプルコード
以下のプログラムでは、アクティブシートに保護をかけますが、行の挿入と削除は許可します。
実際のプログラムでは、既にシート保護がされている場合を想定して、一旦シート保護解除してからシート保護をし直す事が多いようです。
Sub testProtect3()
'既にシート保護されている事もあるので一旦解除しておく
ActiveSheet.Unprotect
'シートを保護するが、行の挿入と削除は許可
ActiveSheet.Protect AllowInsertingRows:=True, _
AllowDeletingRows:=True
End Sub
まとめ
シート保護は、編集されたくない場合に使用します。
オプションはたくさんありますが、デフォルトのままで良い場合は特に指定しなくても大丈夫です。
尚、あるセルを個別にロックさせたくない場合は、シート保護が解除されている状態で、セルのロックを解除し、その後シートの保護をかけるようにします。 初期状態ではセルはロック状態になっています。
セルのロックのみでは、機能しませんので注意してください。
コメント