Excelシートの保護

<< エクセルVBAでExcelシートを印刷する :前の記事

こちらでは、SheetsコレクションオブジェクトProtectメソッドを利用して、Excelの指定したシートを保護する方法について解説しています。

シートの保護とはシート上で誤ってデータを削除したり、書式を変更されるのを防ぐなどの目的で利用されます。外部からの操作を許可しない場合はシートの保護を利用すると有効です。

メソッドとは、オブジェクトを操作する命令文のことでオブジェクトの動作になります。 メソッドを利用するにはオブジェクト名とメソッド名の間に「.(ピリオド)」で結んで記述します。

オブジェクト名.メソッド名

目次

はじめに

こちらでは、Protectメソッドを利用したExcelの指定したシートを保護する方法について解説します。今回は、SheetsコレクションオブジェクトのProtectメソッドを利用しますが、ProtectメソッドはSheetsコレクションオブジェクト以外でも利用されますので、どのオブジェクトで利用できるかも確認してください。

利用するメソッドについて

今回利用するメソッドは以下になります。

Protectメソッドとは

SheetsコレクションオブジェクトのProtectメソッド指定されたシートを保護します。

Sheets("シート名").Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
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」シートが保護され、セルに入力しようとすると以下の内容の警告メッセージが表示されます。

「変更しようとしているセルまたはグラフは保護されているため、読み取り専用となってます。保護されているセルまたはグラフを変更するには、[ツール]メニューの[保護]をポイントし、[シート保護の解除]をクリックして保護を解除します。パスワードの入力を要求されることもあります。」

エクセルVBAのProtectメソッドの結果1

解説

sampleプロシージャSubステートメントに引数は設定されていません。Sheetsコレクションオブジェクトには「Sheet1」シートが設定されています。そして、「Sheet1」シートオブジェクトにProtectメソッドが設定されていますので、処理を実行すると「Sheet1」シートが保護されます。最後はEndステートメントを利用してsampleプロシージャを終了させます。

シートが保護されると行の挿入やセルの入力など一切できなくなりますが、手動で解除することもできます。解除する場合は、以下のように「ツール」→「保護」→「シート保護の解除」をクリックするとシートの保護が解除されます。

エクセルVBAのProtectメソッドの結果2

指定したシートをパスワードを掛けて保護するサンプルコード

今回のVBAコードはExcelの指定したシートをパスワードを掛けて保護するマクロになります。


Sub sample()

    Sheets("Sheet1").Protect Password:="vbaie"

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

「Sheet1」シートが保護されます。手動で解除しようとすると以下のようにパスワードを要求されます。

エクセルVBAのProtectメソッドの結果3

解説

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」のシート構成が保護され、シートのコピーができなくなります。

エクセルVBAのProtectメソッドの結果4

解説

Workbooksコレクションオブジェクトにはワークブック「Book1」が設定されています。そして、「Book1」ワークブックオブジェクトのProtectメソッドには引数Structureに「True」が設定されています。引数Structureはブックの構造(各シートの相対位置)を保護する設定ですので、「True」を設定するとシートの移動やコピーができなくなります

シートのコピーをさせたくない場合などは有効な方法ですので、合わせて覚えておきましょう。ただし、こちらはあくまでブックの保護になります。シートの保護はしていませんので、シートの保護と併せて利用しましょう。

まとめ

今回は、SheetsコレクションオブジェクトとWorkbooksコレクションオブジェクトのProtectメソッドを利用して、Excelの指定したシートを保護する方法について解説しました。次回は、エクセルVBAのセル操作について解説します。

エクセルVBAのワークシート操作一覧

次の記事: エクセルVBAのセル操作 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください。

VBAのIE操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE操作にも挑戦してみてください。

目次

VBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

VBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。