今回はシートの保護、解除を設定する方法をご説明します。
シートの保護とは、入力されているデータや数式、シートを編集できないように設定します。
シートの保護、解除には「Protectメソッド」と「Unprotectメソッド」を使用します。
保護にはパスワード付きもあり、パスワード付きは解除時にパスワードが必要になります。
保護と解除に併せてパスワードの対応もそれぞれ順番にご説明します。
1.シートの保護の使い方
シートを保護するには「Protectメソッド」を使用します。
記述方法は次のようになります。
引数は全て省略可能で任意となります。
※引数がわかりやすいように()で括っていますが、実際には()は不必要です。
Protect(Password, _
DrawingObjects, _
Contents, Scenarios, _
UserInterfaceOnly, _
AllowFormattingCells, _
AllowFormattingColumns, _
AllowFormattingRows, _
AllowInsertingColumns, _
AllowInsertingRows, _
AllowInsertingHyperlinks, _
AllowDeletingColumns, _
AllowDeletingRows, _
AllowSorting, _
AllowFiltering, _
AllowUsingPivotTables)
引数がすごい多いですね。
正直覚えられませんので、ひな形を作っておいたり、使用する際に必要に応じて調べるといいと思います。
これらの引数はExcelの保護の機能に対応しています。
引数一覧
引数 | 説明 | 既定値 |
Password | 255文字以内で保護、解除するパスワードを指定します。 大文字、小文字、全角、半角は区別されます。 省略した場合は、パスワードなしで保護解除ができます。 | – |
DrawingObjects | 描画オブジェクトの保護を指定します。 | True |
Contents | ロックしているセルを保護するか指定します。 | False |
Scenarios | シナリオ機能を使用している場合、シナリオを保護するか指定します。 | True |
UserInterfaceOnly | 画面とマクロの変更を保護するか指定します。 Trueを指定すると画面の変更は保護されますが、マクロからの変更は保護されません。 Falseもしくは省略時は画面とマクロ両方を保護できます。 | 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 |
AllowUsingPivotTables | Trueを指定するとピボットテーブルを使用できます。 | False |
2.シートの保護サンプルコード
シートの保護のサンプルコードです。
基本的なコード
Sub Sample1()
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
sh.Protect
End Sub
シートを保護すると、そのシートを編集しようとした場合に次のようにメッセージが表示されます。
パスワード付き保護するコード
パスワード付きの保護をすると解除しようとする場合にパスワードの入力を求められます。
Sub Sample2()
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
sh.Protect Password:="1111"
End Sub
もしパスワード付きをした場合はパスワードを忘れないようにしましょう。
全シートを保護するコード
全シートを保護する場合、Worksheetsコレクションを指定出来ないので、ループします。
Sub Sample3()
Dim sh As Worksheet
For Each sh In Worksheets
sh.Protect
Next
End Sub
3.シートの保護の解除方法
シートの保護を解除する方法は、引数も少なく保護するより単純です。
記述方法は次のように記述します。
Unprotect(Password)
シート保護がされていないシートを解除しようとした場合は何も起こりません。
引数Passwordは省略可能ですが、パスワード付きのシートを解除しようとした場合に省略するとパスワードを求めるダイアログが表示されます。
また、注意点としてシートがパスワード付きの保護がされている場合に、パスワードを間違うとエラーとなります。
また、シートの保護は見た目だけではわかりませんので、保護されているか判定してから解除するなどの工夫をするとエラーを回避出来ます。
シートが保護されているか判定するには「ProtectContentsプロパティ」を使用します。
4.シートの保護を解除するサンプルコード
基本的なコード
Sub Sample4()
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
sh.Unprotect
End Sub
パスワード付き保護の解除するコード
ちなみにパスワードのない保護にパスワードを指定したコードで解除しても、エラーにならずに解除できます。
Sub Sample5()
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
sh.Unprotect Password:="1111"
End Sub
シートの保護がされているか判定して解除するコード
シートが保護されているか判定するには「ProtectContentsプロパティ」を使用します。
Sub Sample6()
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
If sh.ProtectContents = True Then
sh.Unprotect Password:="1111"
Else
Exit Sub
End If
End Sub