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

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2019-07-17

第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
として、初めてセルが保護されます。

DrawingObjects、Scenarios
上のシート保護のダイアログは、
オブジェクトの編集
シナリオの編集
となっています。
つまり、シート保護した時に、編集を許可する場合にチェックを付けます。
他の引数は、チェックを付けた時にTrueなのですが、
この2つは、チェックを外した時が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。
既定値はFalse です。
Windows ブックのウィンドウを保護する場合は True。
この引数を省略すると、ウィンドウは保護されません。

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

ブックの保護解除

Workbook.Unprotect メソッド
シートまたはブックの保護を解除します。保護されていないシートやブックに対しては、このメソッドは無効です。
式.Unprotect(Password)
式には、Workbook オブジェクトを指定します。

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

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

最後に

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



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

第65回.シートの挿入、名前の変更(Add,Name)
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
第67回.総合練習問題7
第68回.シートの保護、ブックの保護(Protect)
第69回.シートの非表示(Visible)
第70回.ウィンド枠の固定(FreezePanes)
第71回.印刷(PrintOut)
第72回.印刷プレビュー(PrintPreview)
第73回.ページ設定(PageSetup)
第74回.ファイルを開くダイアログ(GetOpenFilename)
第75回.名前を付けて保存ダイアログ(GetSaveAsFilename)


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

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • シートの保護、ブックの保護(Protect)

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


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



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