サイトについて      連絡先   検索

VBA シートを保護する

はじめに

Excel VBA のシートを保護する方法を紹介します。

Sheets.Protect メソッドでシートを保護できます。

Sheets.Unprotect メソッドでシートの保護を解除できます。

シートを保護する

Sheets の引数にインデックスかシート名を指定すると、そのシートを保護できます。

1 番目のシートを保護するには Sheets(1).Protect または Worksheets(1).Protect のように指定します。

Sheets(1).Protect        ' 1 番目のシートを保護
Sheets("Sheet1").Protect '「Sheet1」のシートを保護

Worksheets(1).Protect        ' 1 番目のシートを保護
Worksheets("Sheet1").Protect '「Sheet1」のシートを保護

Protect の引数を指定して、パスワードなどを設定できます。

Call Sheets(1).Protect                          ' Excel で保護を解除できます。
Call Sheets(1).Protect(Password:="Tips")        ' 保護を解除時にパスワードを入力します。
Call Sheets(1).Protect(UserInterfaceOnly:=True) ' Excel の操作を保護し、マクロからは編集できます。

引数には次のものがあります。

引数名 説明 既定値
Password保護を解除するためのパスワードを設定します。半角英数時を指定します。
Contentsオブジェクトの内容を保護させるには、True を指定します。対象はワークシートの場合はロックされているセルです。False
Scenariosシナリオを保護するには、True を指定します。True
UserInterfaceOnly True を指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されません。この引数を省略すると、マクロからも、画面上も変更することができなくなります。False
AllowFormattingCellsTrue を指定すると、セルの書式設定ができます。False
AllowFormattingColumnsTrue を指定すると、列の書式設定ができます。False
AllowFormattingRowsTrue を指定すると、行の書式設定ができます。False
AllowInsertingColumnsTrue を指定すると、列を挿入できます。False
AllowInsertingRowsTrue を指定すると、行を挿入できます。False
AllowInsertingHyperlinksTrue を指定すると、ハイパーリンクを挿入できます。False
AllowDeletingColumnsTrue を指定すると、列を削除でき、削除される列のセルはすべてロック解除されます。False
AllowDeletingRowsTrue を指定すると、行を削除でき、削除される行のセルはすべてロック解除されます。False
AllowSortingTrue を指定すると、並べ替えができます。並べ替え範囲内のセルは、ロックと保護が解除されている必要があります。False
AllowFilteringTrue を指定すると、フィルタを設定できます。ユーザーは、フィルタ条件を変更できますが、オート フィルタの有効と無効を切り替えることはできません。False
AllowUsingPivotTablesTrue を指定すると、ピボットテーブル レポートを使用できます。False

Password には半角英数字を指定します。これはパスワードの入力欄にそれしか入力できないからです。パスワードを忘れると解除できなくなりますので、注意が必要です。

UserInterfaceOnly を True にすると、マクロから編集可能な状態になり、Excel からの編集は保護されます。ただし、Excel を閉じて再度開いたときはマクロからの編集が不可です。再度 UserInterfaceOnly を True にしてやる必要があります。

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

このためグラフシートなどは Worksheets.Protect で保護できません。

シートの保護を解除する

Sheets の引数にインデックスかシート名を指定すると、そのシートを保護を解除できます。

ActiveSheet.Unprotect ' シートの保護を解除する
Sheets(1).Unprotect   ' シートの保護を解除する

引数にパスワードを指定して、パスワード付きの保護を解除できます。

Call ActiveSheet.Unprotect(Password:="Tips") ' パスワード付きの保護を解除する

もし Password に「ひらがな」などを指定したときは、パスワードの入力欄に貼り付けするか、Unprotect でそのパスワードを指定しなければなりません。パスワードの入力に「ひらがな」などは入力できません。

シートが保護されているか判定する

Sheets.ProtectContents が True だと保護されています。False だと保護されていません。

Dim b As Boolean
b = ActiveSheet.ProtectContents ' シートが保護されているか
b = Sheets(1).ProtectContents ' シートが保護されているか
Debug.Print(b)

関連ページ