Excel VBA シートの保護、解除を設定する

ExcelVBA-基礎編

今回はシートの保護、解除を設定する方法をご説明します。

シートの保護とは、入力されているデータや数式、シートを編集できないように設定します。

シートの保護、解除には「Protectメソッド」と「Unprotectメソッド」を使用します。

保護にはパスワード付きもあり、パスワード付きは解除時にパスワードが必要になります。

保護と解除に併せてパスワードの対応もそれぞれ順番にご説明します。

1.シートの保護の使い方

シートを保護するには「Protectメソッド」を使用します。

記述方法は次のようになります。

引数は全て省略可能で任意となります。

※引数がわかりやすいように()で括っていますが、実際には()は不必要です。

Protect(Password, _
        DrawingObjects, _
        Contents, Scenarios, _
        UserInterfaceOnly, _
        AllowFormattingCells, _
        AllowFormattingColumns, _
        AllowFormattingRows, _
        AllowInsertingColumns, _
        AllowInsertingRows, _
        AllowInsertingHyperlinks, _
        AllowDeletingColumns, _
        AllowDeletingRows, _
        AllowSorting, _
        AllowFiltering, _
        AllowUsingPivotTables)

引数がすごい多いですね。

正直覚えられませんので、ひな形を作っておいたり、使用する際に必要に応じて調べるといいと思います。

これらの引数はExcelの保護の機能に対応しています。

引数一覧

引数説明既定値
Password255文字以内で保護、解除するパスワードを指定します。
大文字、小文字、全角、半角は区別されます。
省略した場合は、パスワードなしで保護解除ができます。
DrawingObjects描画オブジェクトの保護を指定しますTrue
Contentsロックしているセルを保護するか指定しますFalse
Scenariosシナリオ機能を使用している場合、シナリオを保護するか指定しますTrue
UserInterfaceOnly画面とマクロの変更を保護するか指定します。
Trueを指定すると画面の変更は保護されますが、マクロからの変更は保護されません。
Falseもしくは省略時は画面とマクロ両方を保護できます
False
AllowFormattingCellsTrueを指定するとセルの書式設定ができます。False
AllowFormattingColumnsTrueを指定すると列の書式設定ができます。False
AllowFormattingRowsTrueを指定すると行の書式設定ができます。False
AllowInsertingColumnsTrueを指定すると列を挿入できます。False
AllowInsertingRowsTrueを指定すると行を挿入できます。False
AllowInsertingHyperlinksTrueを指定するとハイパーリンクを挿入できます。False
AllowDeletingColumnsTrueを指定すると列を削除できます。
削除される列のセルはすべてロック解除されます。
False
AllowDeletingRowsTrueを指定すると行を削除できます。
削除される行のセルはすべてロック解除されます。
False
AllowSortingTrue を指定すると並べ替えができます。
並べ替え範囲内のセルは、ロックと保護が解除されている必要があります。
False
AllowFilteringTrueを指定すると、フィルタを設定できます。
フィルタ条件を変更できますが、オート フィルタの有効と無効を切り替えることはできません。
False
AllowUsingPivotTablesTrueを指定するとピボットテーブルを使用できます。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
タイトルとURLをコピーしました