【Excel VBA】シートの保護(Protect)

はじめに

今回は、シートの保護について解説します。
勝手にデータを操作させられたり、行や列を追加してフォーマットを崩されることを防ぐため、シートを保護したい場合もあるかと思います。
Excel VBAにおけるシート保護の設定方法について解説します。

この記事を読むメリット
  • シートの操作を制限する方法として、シートの保護の方法が分かります。
  • パスワードを用いて制限を解除する方法が分かります。
  • シートの制限範囲の指定方法が分かります。
  • コピペで使える実践的なサンプルコードを掲載しています。

基本情報

Protectメソッド

シートの保護をするには、WorksheetオブジェクトのProtectメソッドを使用します。

構文

Worksheetオブジェクト.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)

緑字は引数です。

引数

Protectメソッドに渡す引数を以下に示します。
なお、すべて省略可能です。省略した場合は規定値列の値となります。

#引数規定値詳細
1Passwordシートの保護を解除する際のパスワードを文字列で指定します。
省略するとパスワードなしでシートの保護を解除できます。
※大文字と小文字が区別されます。
2DrawingObjectsTrueTrueを指定した場合、図形(描画オブジェクト)を保護します。
3ContentsTrueTrueを指定した場合、以下が保護されます。
 グラフシート:グラフ全体
 ワークシート:シートのセル全体
4ScenariosTrueTrueを指定した場合、シナリオを保護します。
5UserInterfaceOnlyFalseTrueを指定した場合、画面上の変更のみ保護される。
※マクロでの変更は保護されない。
6AllowFormattingCellsFalseTrueを指定した場合、シートのセルを書式化することが出来る。
7AllowFormattingColumnsFalseTrueを指定した場合、シートの列を書式化することが出来る。
8AllowFormattingRowsFalseTrueを指定した場合、シートの行を書式化することが出来る。
9AllowInsertingColumnsFalseTrueを指定した場合、シートに列を挿入することが出来る。
10AllowInsertingRowsFalseTrueを指定した場合、シートに行を挿入することが出来る。
11AllowInsertingHyperlinksFalseTrueを指定した場合、シートにハイパーリンクを挿入することが出来る。
12AllowDeletingColumnsFalseTrueを指定した場合、シートの列を削除することが出来る。
13AllowDeletingRowsFalseTrueを指定した場合、シートの行を削除することが出来る。
14AllowSortingFalseTrueを指定した場合、セルの移動(並べ替え)を行うことが出来る。
15AllowFilteringFalseTrueを指定した場合、シートにフィルターを設定することが出来る。
※オートフィルターの有効/無効の切り替えは不可。
16AllowUsingPivotTablesFalseTrueを指定した場合、シートでピボットテーブルを使用することが出来る。
シートの保護 – 引数

補足 – 書式化

書式化とは、セル・行・列の編集を実施できる状態のことを指します。

書式化で出来ること
  • AllowFormattingCellsにてセルを書式化した場合
    • シート内全セルの書式設定(罫線や色の設定、フォント設定など)が出来る。
  • AllowFormattingColumnsにて列を書式化した場合
    • 列幅の設定や、列の表示・非表示が可能
  • AllowFormattingRowsにて行を書式化した場合
    • 行高の設定や、行の表示・非表示が可能

サンプルコード

シートを保護する

マクロを実行しているブックの 1番目のシートを保護します。
シートを保護されていてもコピーなどの操作は可能であるため、データの編集を完全に防ぎたい場合に使用しましょう。

サンプルコード
Public Sub sheetProtect()

    ThisWorkbook.Worksheets(1).Protect
End Sub
りゅう

上記でシートの保護は出来ますが、使用者にてシートの保護の解除操作が実施されると、誰でも保護を解除出来てしまいます。
その場合は、後ほど掲載するサンプルコード「パスワード付きでシートを保護する」を参照ください。

シートの保護を解除する方法

シートの保護を解除する方法は以下の通りです。
※画像をクリックして拡大できます。

シートの保護を解除する方法
シートの保護を解除する方法

パスワード付きでシートを保護する

シートを保護するが、パスワードを知っている方のみ保護を解除できるようにします。
以下の例では、パスワード「vba-hack」を入力すると、一時的に保護を解除出来ます。

サンプルコード
Public Sub sheetProtectPassword()

    ThisWorkbook.Worksheets(1).Protect Password:="vba-hack"
End Sub

シートの保護を解除する方法(パスワード入力)

パスワード付きのシートの保護を解除する方法について解説します。
まず、以下の通りに「シート保護の解除」を選択してください。

シート保護の解除を選択
シート保護の解除を選択

パスワードを入力するウィンドウが表示されます。
パスワード入力後、「OK」ボタンを押下すると保護が解除されます。

パスワード入力
パスワード入力

一部のセルを入力可能とし、シートを保護する

一部のセルを入力可能とし、残りのセルのシートを保護する方法を解説します。
LockedプロパティにFalseを入力することで、保護の対象外とすることが可能です。

サンプルコード
Public Sub sheetProtectForInputCell()

    ' A1セルのロックを解除する
    ThisWorkbook.Worksheets(1).Range("A1").Locked = False

    ' シートを保護する
    ThisWorkbook.Worksheets(1).Protect
End Sub

最後に

今回は、シートを保護する方法について解説しました。
マクロの実行後に仕上げとして保護をかけることが多いかと思います。

保護をかける範囲やパスワード保護など、工夫してみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA