Excelシートの保護
<< エクセルVBAでExcelシートを印刷する :前の記事
こちらでは、SheetsコレクションオブジェクトのProtectメソッドを利用して、Excelの指定したシートを保護する方法について解説しています。
シートの保護とはシート上で誤ってデータを削除したり、書式を変更されるのを防ぐなどの目的で利用されます。外部からの操作を許可しない場合はシートの保護を利用すると有効です。
メソッドとは、オブジェクトを操作する命令文のことでオブジェクトの動作になります。 メソッドを利用するにはオブジェクト名とメソッド名の間に「.(ピリオド)」で結んで記述します。
オブジェクト名.メソッド名
目次
- はじめに
- 利用するメソッドについて
- 指定したシートを保護するサンプルコード
- 指定したシートをパスワードを掛けて保護するサンプルコード
- 指定したシートをコピー不可にするサンプルコード
- まとめ
- エクセルVBAのワークシート操作一覧
はじめに
こちらでは、Protectメソッドを利用したExcelの指定したシートを保護する方法について解説します。今回は、SheetsコレクションオブジェクトのProtectメソッドを利用しますが、ProtectメソッドはSheetsコレクションオブジェクト以外でも利用されますので、どのオブジェクトで利用できるかも確認してください。
利用するメソッドについて
今回利用するメソッドは以下になります。- Protectメソッド
Protectメソッドとは
SheetsコレクションオブジェクトのProtectメソッドは指定されたシートを保護します。
Sheets(インデックス番号).Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
指定したシートを保護するサンプルコード
今回のVBAコードはExcelの指定したシートを保護するマクロになります。
Sub sample()
Sheets("Sheet1").Protect
End Sub
実行結果
「Sheet1」シートが保護され、セルに入力しようとすると以下の内容の警告メッセージが表示されます。
「変更しようとしているセルまたはグラフは保護されているため、読み取り専用となってます。保護されているセルまたはグラフを変更するには、[ツール]メニューの[保護]をポイントし、[シート保護の解除]をクリックして保護を解除します。パスワードの入力を要求されることもあります。」
解説
sampleプロシージャのSubステートメントに引数は設定されていません。Sheetsコレクションオブジェクトには「Sheet1」シートが設定されています。そして、「Sheet1」シートオブジェクトにProtectメソッドが設定されていますので、処理を実行すると「Sheet1」シートが保護されます。最後はEndステートメントを利用してsampleプロシージャを終了させます。
シートが保護されると行の挿入やセルの入力など一切できなくなりますが、手動で解除することもできます。解除する場合は、以下のように「ツール」→「保護」→「シート保護の解除」をクリックするとシートの保護が解除されます。
指定したシートをパスワードを掛けて保護するサンプルコード
今回のVBAコードはExcelの指定したシートをパスワードを掛けて保護するマクロになります。
Sub sample()
Sheets("Sheet1").Protect Password:="vbaie"
End Sub
実行結果
「Sheet1」シートが保護されます。手動で解除しようとすると以下のようにパスワードを要求されます。
解説
sampleプロシージャのSubステートメントに引数は設定されていません。Sheetsコレクションオブジェクトには「Sheet1」シートが設定されています。そして、「Sheet1」シートオブジェクトのProtectメソッドには名前付き引数で引数Passwordにパスワードの「vbaie」が設定されています。
これにより、手動でシート保護の解除をしようとした場合にパスワードを要求することができます。シートの保護を解除されたくない場合はパスワードを設定するようにしましょう。
また、こちらでは名前付き引数を使用して引数設定していますが、以下のように名前付き引数をつけなくても設定できます。
Sub sample()
Sheets("Sheet1").Protect "vbaie"
End Sub
指定したシートをコピー不可にするサンプルコード
今回のVBAコードはExcelの指定したシートをコピー不可にするマクロになります。
Sub sample()
Workbooks("Book1").Protect Structure:=True
End Sub
実行結果
ワークブック「Book1」のシート構成が保護され、シートのコピーができなくなります。
解説
Workbooksコレクションオブジェクトにはワークブック「Book1」が設定されています。そして、「Book1」ワークブックオブジェクトのProtectメソッドには引数Structureに「True」が設定されています。引数Structureはブックの構造(各シートの相対位置)を保護する設定ですので、「True」を設定するとシートの移動やコピーができなくなります。
シートのコピーをさせたくない場合などは有効な方法ですので、合わせて覚えておきましょう。ただし、こちらはあくまでブックの保護になります。シートの保護はしていませんので、シートの保護と併せて利用しましょう。
まとめ
今回は、SheetsコレクションオブジェクトとWorkbooksコレクションオブジェクトのProtectメソッドを利用して、Excelの指定したシートを保護する方法について解説しました。次回は、エクセルVBAのセル操作について解説します。
エクセルVBAのワークシート操作一覧
次の記事: エクセルVBAのセル操作 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。