シートの保護:Protectメソッド
シートの保護を行うにはWorksheetオブジェクトのProtectメソッドを使います。
保護の際にパスワードを指定することが可能です。そのシートの保護を解除する場合にはパスワードが必要になります。
シートの保護を行うとセルの編集ができなくなります。ただしロックが解除されているセルの編集は可能です。
以下でシートの保護と解除の方法を紹介します。
シート保護の構文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Worksheet.Protect( [Password], [DrawingObjects], [Contents], [Scenarios], [UserInterfaceOnly], [AllowFormattingCells], [AllowFormattingColumns], [AllowFormattingRows], [AllowInsertingColumns], [AllowInsertingRows], [AllowInsertingHyperlinks], [AllowDeletingColumns], [AllowDeletingRows], [AllowSorting], [AllowFiltering], [AllowUsingPivotTables]) |
親オブジェクト | Worksheetオブジェクトを指定します。 |
Password (省略可) |
255文字以内でパスワードを指定します。
大文字、小文字、半角、全角は区別されます。省略するとパスワードなしになります。 |
DrawingObjects(省略可) | 描画オブジェクトを保護するかどうかを指定します。
Trueもしくは省略時は保護されます。Falseは保護されません。 |
Contents(省略可) | ロックしているセルを保護するかどうかを指定します。
Trueもしくは省略時は保護されます。Falseは保護されません。 グラフシートの場合はグラフ全体が保護対象になります。 |
Scenarios (省略可) |
シナリオ機能を使っている場合にそのシナリオを保護するかどうかを指定します。
Trueもしくは省略時は保護されます。Falseは保護されません。 |
UserInterfaceOnly (省略可) |
画面とマクロの変更を保護するかどうかを指定します。
Trueの場合は画面上の変更は保護されますがマクロでの変更は保護されません。Falseまたは省略時は画面とマクロの両方で変更できなくなります。 |
AllowFormattingCells (省略可) |
セルの書式変更ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowFormattingColumns (省略可) |
列の書式変更ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowFormattingRows (省略可) |
行の書式変更ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowInsertingColumns (省略可) |
列の挿入ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowInsertingRows (省略可) |
行の挿入ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowInsertingHyperlinks (省略可) |
ハイパーリンクの挿入ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowDeletingColumns (省略可) |
列の削除ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowDeletingRows (省略可) |
行の削除ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowSorting (省略可) |
並べ替えができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
AllowFiltering (省略可) |
フィルタの設定ができるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。Trueの場合、オートフィルタの有効無効は切り替えられません。 |
AllowUsingPivotTables (省略可) |
ピボットテーブルが利用できるかどうかを指定します。
Trueの場合はできますが、Falseまたは省略時はできません。 |
シート保護のサンプルコード
アクティブシートを保護する際に引数にパスワードを設定するサンプルです。
1 2 3 4 5 6 |
Sub ProtectTest() Dim sht As Worksheet Set sht = ActiveSheet Call sht.Protect(Password:="あア") End Sub |
シートの保護の解除:UnProtectメソッド
シートの保護の解除を行うにはWorksheetオブジェクトのUnProtectメソッドを使います。
シート保護の解除の構文
1 |
Sub Unprotect([Password]) |
親オブジェクト | Worksheetオブジェクトを指定します。 |
Password(省略可) | シート保護中に設定したパスワードを指定します。
パスワードが掛かっているシートに対してパスワードの指定を省略した場合はパスワード入力ダイアログが表示されます。 |
シートの保護がされていない場合にUnprotectメソッドを実行しても何も起こりません。
パスワードが間違っている場合は実行時エラーが発生して処理が止まってしまいます。
処理を止めたくない場合は、On Error Goto xxxなどのエラー処理を入れて処理が止まるのを回避するようにしてください。
シート保護解除のサンプルコード
アクティブシートの保護を解除するサンプルです。
パスワードが正しくない場合に実行時エラーが発生しても処理が継続するようにエラー処理を入れています。
1 2 3 4 5 6 7 8 9 10 11 |
Sub UnProtectTest() On Error GoTo ERR_EXIT Dim sht As Worksheet Set sht = ActiveSheet Call sht.Unprotect(Password:="あア") ERR_EXIT: End Sub |
シートが保護されているか確認する
シートの保護は見た目上わかりません。
実際に入力してエラーダイアログが出て初めて保護されていることに気が付きます。
しかしVBAで処理する場合にはそれでは困る場合があります。
保護されているかどうかは以下のようにProtectContentsプロパティで判定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub CheckProtect() Dim bRet As Boolean Dim sht As Worksheet Set sht = ActiveSheet bRet = sht.ProtectContents If (bRet = True) Then Debug.Print "保護あり" Else Debug.Print "保護なし" End If End Sub |