VBA入門
シートの保護、ブックの保護(Protect)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-09-28

第68回.シートの保護、ブックの保護(Protect)


せっかく作ったExcelシートを間違って壊してしまったり、Excel操作に慣れない人が壊してしまったら困ります。
無用な改変、意図しない変更からシートを保護するには、ワークシートを保護します。


ただしシートの削除は、シート保護では守れません、
シートの保護に対応するには、ブックの保護が必要です。

マクロVBAで、シート保護、ブック保護する場合の詳細について解説します。


シートの保護

Worksheet.Protectメソッド

ワークシートを保護し、変更できないようにします。

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

式には、Worksheetオブジェクトを指定します。

引数 説明 既定値
Password パスワードでは大文字と小文字が区別されます。
この引数を省略すると、ワークシートまたはブックはパスワードの使用なしで保護解除できます。
この引数を指定すると、保護解除をするためには、そのパスワードが必要になります。
パスワードを忘れると、シートまたはブックの保護を解除できなくなってしまうので注意してください。
DrawingObjects 描画オブジェクトを保護するには、True を指定します。 TRUE
Contents オブジェクトの内容を保護するには、True を指定します。
この引数による保護対象は、グラフの場合はグラフ全体、ワークシートの場合はロックされているセルです。
TRUE
Scenarios シナリオを保護するには、True を指定します。この引数はワークシートの場合のみ有効です。 TRUE
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
AllowUsingPivotTables True を指定すると、ユーザーは保護されたワークシートでピボットテーブル レポートを使用することができます。 FALSE

全ての引数がオプション(任意指定)です。

引数が非常に多くあります。
これらは、「シートの保護」のダイアログ画面のチェックボックスに対応しています。

マクロ VBA シート保護

この一つ一つのチェックが、上記の引数に対応しています。
複雑な指定をする場合は、マクロの記録を利用すると良いでしょう。

以下では、特に注意が必要な引数のみ追加解説します。

Contents

エクセルの基本ですが、ロックされているセルが対象です。
「セルの書式設定」→「保護」→「ロック」
ここに、チェックが付いていて、

Contents:=True

として、初めてセルが保護されます。

セル(Rangeオブジェクト)の保護のロック
マクロ VBA シート保護

セルをロックするにはLockedプロパティをTrueにします。
Rangeオブジェクト.Locked = True

DrawingObjects、Scenarios

上のシート保護のダイアログは、
オブジェクトの編集
シナリオの編集
となっています。
つまり、シート保護した時に、編集を許可する場合にチェックを付けます。
他の引数は、チェックを付けた時にTrueなのですが、
この2つは、チェックを外した時がTrueになります。
マクロの記録を使う場合は、少し注意が必要です。


UserInterfaceOnly

True を指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されません。
つまり、これで保護した場合はユーザー操作からは保護されますが、VBAからは保護されない状態になります。

ただし、以下の注意が必要です。
UserInterfaceOnlyをTrueに設定してからワークブックを保存して、再度ワークブックを開いたときにはワークシート全体 (ユーザーインターフェイスだけでなく) が完全に保護されてしまいます。
つまり、ワークブックを開いた後にUserInterfaceOnlyをTrueに毎回再設定する必要があります。


シートの保護解除

Worksheet.Unprotect メソッド

ワークシートの保護を解除します。

式.Unprotect Password

名前 説明
Password シートの保護を解除するためのパスワードを指定します。
なお、パスワードでは大文字と小文字は区別されます。
シートの保護にパスワードが指定されていないときは、この引数は無視されます。
パスワードが設定されているにもかかわらず、この引数を省略するとパスワードの入力を促すダイアログ ボックスが表示されます。

引数はオプション(任意指定です)


シート保護・解除の実践例

ユーザーには変更させないシートを、マクロVBAで変更する場合。

Worksheets(1).Unprotect Password:="password"
'・・・シートへの変更処理・・・
Worksheets(1).Protect Password:="password" AllowFiltering:=True

上記では、保護に際しパスワードを設定しています。
また、
ユーザーにオートフィルタの使用を許可しています。


ブックの保護

Workbook.Protect メソッド

変更できないようにブックを保護します。

式.Protect(Password, Structure, Windows)

式には、Workbook オブジェクトを指定します。

名前 説明
Password ワークシートまたはブックのパスワードを示す文字列。
大文字と小文字が区別されます。
この引数を省略すると、パスワードを使用せずにワークシートまたはブックの保護を解除できます。
この引数でパスワードを指定すると、ワークシートまたはブックの保護を解除するときにパスワードが必要になります。
パスワードを忘れると、ワークシートまたはブックの保護を解除できなくなります。
Structure ブックの構造 (各シートの相対位置) を保護する場合はTrue。
既定値はTrueです。

※2013以降では必ずStructureをTrue(または省略)にしてください。
StructureをFalseとした場合はブック保護が有効になりません。
Windows ブックのウィンドウを保護する場合は True。
この引数を省略すると、ウィンドウは保護されません。

※2013以降ではこのオプションは機能していません。

全ての引数がオプション(任意指定)です。

マクロVBA入門 ブックの保護


ブックの保護解除

Workbook.Unprotect メソッド

シートまたはブックの保護を解除します。保護されていないシートやブックに対しては、このメソッドは無効です。

式.Unprotect(Password)

式には、Workbook オブジェクトを指定します。

名前 データ型 説明
Password バリアント型 (Variant) ブックの保護を解除するためのパスワードを示す文字列。
パスワードでは大文字と小文字が区別されます。
ブックがパスワードで保護されていない場合、この引数は無視されます。
対象のブックがパスワードで保護されている場合、この引数を省略すると、そのブックの保護を解除することはできません。

引数はオプション(任意指定です)


最後に

作ったエクセルを事故(間違った操作等)から守るために保護は必須です。
しかし、
たとえブックを保護しても、Excelファイルは削除できてしまいます。
最終的には、バックアップと運用ルールをしっかり決めておくことと、
使用者全員が最低限のエクセル知識を持つことが肝心です。




同じテーマ「マクロVBA入門」の記事

第65回.シートの挿入、名前の変更(Add,Name)

・シートの挿入 ・シートの名前変更 ・シート挿入、名前変更の実践例
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
・シートのコピー・移動 ・シートの削除 ・シートのコピー・移動・削除の関連記事
第67回.総合練習問題7
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第68回.シートの保護、ブックの保護(Protect)
第69回.シートの非表示(Visible,Hidden)
ユーザーが操作・閲覧する必要のないシートは非表示にする事で使い易いExcelブックにします。マスタ情報やマクロでのみ使用するデータが入っているシート等、通常は使用者が変更することがなく、見る必要もないのであれば、シート保護をするより非表示にしてしまった方が、ユーザーにとっては使いやすいブックとなります。
第70回.ウィンド枠の固定(FreezePanes)
ウィンドウ枠を固定し、行の上部や列の左側がスクロールされないようにする場合のマクロVBA解説になります。ワークシートの行の上部や列の左側は、通常は見出しとして使う事が多くなります。ウィンドウ枠を固定することで見出しの行や列を固定し、スクロールしても見出しが表示されたままにする場合が多くなります。
第71回.印刷(PrintOut)
・PrintOutメソッド ・PrintOutメソッドの使用例 ・印刷時にプリンターを選択したい場合 ・印刷総ページ数の取得 ・間違った印刷を大量に行わないわない為には
第72回.印刷プレビュー(PrintPreview)
・PrintPreviewメソッド ・PrintOutメソッドの使用 ・PrintPreviewメソッドとPrintOutメソッドの使い分け
第139回.エクスポート(PDF/XPS)
・PDFとは、XPSとは ・ExportAsFixedFormatメソッド ・PDFのオプションについて ・ExportAsFixedFormatの使用例
第73回.ページ設定(PageSetup,PageBreak)
・PageSetupオブジェクト ・PrintCommunicationプロパティ ・ヘッダー・フッターのプロパテの設定方法 ・余白の設定方法 ・印刷範囲の設定/クリア:PrintArea ・総ページ数:Pages.Count ・改ページの位置を設定:PageBreak ・最後に
第74回.ファイルを開くダイアログ(GetOpenFilename)
・GetOpenFilenameメソッド ・GetOpenFilenameの使用例 ・GetOpenFilenameの実践例 ・GetOpenFilenameの初期フォルダーの指定 ・GetOpenFilenameの最後に


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ