Excelシートの保護

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

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

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

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

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

目次

はじめに

こちらでは、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)
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のInternetExplorer操作入門

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

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

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

スポンサー リンク

エクセルVBAのオブジェクト

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

スポンサー リンク

エクセルVBAのプロパティ

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

エクセルVBAのメソッド

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

エクセルVBAのイベント

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