VBA ワークシートの保護と保護の解除
In this Article
このチュートリアルでは、VBAでExcelワークシートの保護および保護の解除の方法に関するすべてを学ぶことができます。
パスワードのないExcelワークシートの保護を解除する
パスワードで保護されていないワークシートの保護を解除するには、次のような簡単なコードを使用します。
Worksheets("Sheet1").Unprotect
パスワード付きのExcelワークシートの保護を解除する
パスワードで保護されているワークシートの保護を解除するには、パスワードの入力も必要です。
Worksheets("Sheet1").Unprotect "Password"
シートの保護を解除する – パスワードを紛失したとき
パスワードがわからないワークシートの保護を解除するには、パスワード復旧アドインを使用する必要があります。
ワークシートを保護する
ワークシートの保護では、シートの特定の部分を編集できないようにロックすることができます。
このメニューは、「校閲」タブでシートの保護、またはシートのタブ名のところを右クリックすることで表示されます。
最も一般的には、「ロックされた」セルを編集から保護し、エンドユーザーに特定のセルのみ編集を許可するために使用されます。
セルを選択し、「セルの書式設定」メニューの 「保護」タブ (CTRL + 1)を開くと、セルをロックすることができます。
また、ユーザーがワークシートの構造を変更したり(行と列の挿入、削除、サイズ変更)、オートフィルタを使用できないようにすることもできます。
パスワード無しでワークシートを保護する
パスワードを入力せずにワークシートを保護したい場合があります。これにより、ワークシートが誤って変更されることを防ぎつつ、必要に応じてユーザーが変更するためのアクセス権を得ることができます。
Worksheets("Sheet1").Protect
パスワードをかけてワークシートを保護する
Worksheets("Sheet1").Protect "Password"
ワークシートの保護設定
上記の例では、標準的な保護設定でワークシートを保護します。その代わり、保護する内容をカスタマイズしたい場合があります。
Worksheets("Sheet1").Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _ (ハイパーリンクの挿入を許可する)。
AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False
上記の構文を使用するよりも、希望の設定(上記のワークシート保護メニューで選択)でマクロを記録し、記録されたコードをプロシージャにコピー&ペーストすることをお勧めします。
シートの保護 – VBAによる変更を許可する
デフォルトでは、シートを保護すると、ユーザーの操作に加えて、VBAの操作にも保護が適用されます。VBAがロックされたセルを変更しようとすると、ランタイムエラー1004が表示されます。これを避けるには、VBAがワークシートを操作する必要があるときに、ワークシートの保護を解除し、再保護することができます。
Sub Edit_Sheet1()
'Sheet1の保護を解除する
Worksheets("Sheet1").Unprotect
'Sheet1に対して何かをする
'Sheet1を再保護する
Worksheets("Sheet1").Protect
End Sub
しかし、ワークシートの保護解除や再保護を忘れてしまいがちです。これは、コーディングエラーの確率を増加させる可能性があります。 代わりに、UserInterFaceOnlyの設定を使用することができます。TRUEに設定すると、ワークシートはユーザーからだけ保護され、VBAからは保護されません。 VBAのコードは、ロックが解除されている場合と同様にワークシートを自由に編集することができます。 UserInterFaceOnlyの重要なポイントは2つです。
- この設定は、ワークシートの保護メニュー(上図)からは行えません。VBAで定義する必要がある設定です。
- この設定は、ワークブックを閉じても保存されません。ワークブックを開くたびに再定義する必要があります。
そこで、UserInterFaceOnlyプロパティを設定するために、ThisWorkbookモジュールに以下のWorkbook_Openイベントプロシージャを配置します。
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect UserInterfaceOnly:=True
Next ws
End Sub
Workbook_Openは、ワークブックが開かれるたびに実行される特別なイベントプロシージャです。 これは、ThisWorkbookモジュールに配置する必要があります。また、Auto_Openイベントプロシージャを使用することもできます。(ここでは説明しません。)
すべてのシートの保護を解除するマクロ
このマクロは、ワークブック内のすべてのシートのプロテクトを解除します。
'すべてのワークシートの保護を解除する
Sub UnProtectAllSheets()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Unprotect "password"
Next ws
End Sub
すべてのシートを保護するマクロ
このマクロは、ワークブック内のすべてのシートを保護します。
'すべてのワークシートを保護する
Sub ProtectAllSheets()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect "password"
Next ws
End Sub