Excelのシートの保護

Microsoft Excel

Excelで特定のセルに値を入力されたくなかったり、特定のセルの値を勝手に変更されたくないなどは「シート保護」機能を利用すると実現することができます。

「シートの保護」では、行や列の挿入をできなくしたり、文字色や背景色などを変更できなくしたりなども可能です。「シートの保護」ダイアログで設定できます。チェックを入れた操作名の操作は実行できるようになるので、何もかも実行できなくする場合(閲覧のみ)はチェックを全て外します。

「シートの保護」の前準備

  1. 何も設定していない場合、全てのセルがセル値保護対象となりますので、一度セル全体を選択状態にするためにシートの左上端をクリックします。
    セル全体を選択する
  2. 「セルの書式設定」ダイアログを表示するので、ホームタブの 書式-セルの書式設定(E)をクリックします。
    セルの書式設定

  3. 保護タブのロックにチェックをはずしてOKボタンをクリックします。これで不要なセルが保護されることがなくなります。
    ロックの解除

  4. 最後に値を保護したいセルを選択状態にして、再び「セルの書式設定」ダイアログを表示して、保護タブのロックにチェックを入れてOKボタンをクリックします。保護したいセルが複数ある場合は、そのセル全てに対してこの操作を行います。
    ロックを設定

  5. 以上で、「シートの保護」の前準備が完了です。

「シートの保護」を実行する

  1. 校閲タブのシートの保護をクリックします。
    シートの保護をクリック

  2. 表示される「シートの保護」ダイアログの「このシートのすべてのユーザーに許可する操作(O)」で、操作せれたくないものはチェックを外し、操作を許可するものにはチェックを入れます。すべての操作をさせない場合はチェックを全て外します。
    許可する操作にチェックする

  3. 「シートの保護」を解除するのにパスワードを入力させる場合は、「シートの保護を解除するためのパスワード(P)」にパスワードを入力します。使っているユーザーが勝手に「シートの保護」を解除させれなくするためなどの場合は推測されないようなパスワードを入力しておきます。なおこのパスワードを忘れると「シートの保護」が解除できなくるので忘れないようにしてください。
    パスワードの入力

  4. パスワードの確認を聞いてくるので、パスワードを再度入力します。
    パスワードの確認入力

  5. 以上で「シートの保護」の設定は完了です。

「シートの保護」を解除する

  1. 校閲タブのシート保護の解除をクリックします。
    シート保護の解除をクリック

  2. パスワードを設定している場合は、パスワードを聞いてくるので入力します。
    シート保護の解除のパスワード入力

  3. 以上で「シートの保護」は解除されます。

VBAから操作可能な「シートの保護」

校閲-シートの保護で「シートの保護」を行った場合にVBAから保護に関わる処理を行おうとすると「変更しようとしているセルやグラフは保護されているシート上にあります。変更するには、[校閲] タブの [シート保護の解除] をクリックします(パスワードの入力が必要な場合もあります)」というエラーメッセージが表示されとなり操作できません。通常のExcel操作では保護するけれど、VBAからは保護に関わる操作が可能な「シートの保護」を実現するにはExcelのメニューからではなくVBAプログラミングで「シートの保護」を行う必要があります。

  • WorksheetオブジェクトのProtectメソッドを利用して「シートの保護」を行います。第5引数を「True」にすることで、VBAからは操作可能な「シートの保護」を実現できます。

    Public Sub SheetProtectOn()
    Call ActiveWorksheet.Protect(, , , , True)
    End Sub
  • 「シートの保護」を解除するのにパスワードを必要とするには、第1引数にパスワード文字列を指定すると実現できます。例では「passwd」というパスワードを指定しています。

    Public Sub SheetProtectOn()
    Call ActiveWorksheet.Protect("passwd", , , , True)
    End Sub

VBAから操作可能な「シートの保護」の解除

VBAプログラムで「シートの保護」を行った場合、校閲タブのシートの保護の解除で保護を解除することが可能です。また逆に校閲-シートの保護で保護を行った場合でも、VBAから「シートの保護の解除」は行えます。

  • VBAプログラムで「シートの保護の解除」は下記コードで実現できます。

    Public Sub SheetProtectOff()
    Call ActiveWorksheet.Unprotect()
    End Sub
  • パスワード保護された「シートの保護」の場合は、第1引数にパスワード文字列を指定すると実現できます。例では「passwd」というパスワードを指定しています。

    Public Sub SheetProtectOff()
    Call ActiveWorksheet.Unprotect("passwd")
    End Sub

「シートの保護」の覚え書き

  • 「シートの保護」の保護する操作内容

    保護する操作名 保護の内容(チェックなし時)
    ロックされたセル範囲の選択 指定シートの「ロック」になっているセルは選択できなくします。そのためセルのコピーなどもできなくなります。
    ロックされていないセル範囲の選択 指定シートの「ロック」になっていないセルを選択できなくします。そのためセルのコピーもできなくなります。
    セルの書式設定 指定シートで、文字色や背景色などセルや文字に対する書式設定操作ができなくなります。また列や行の削除・書式設定もできなくなります。
    列の書式設定 指定シートの列単位での、文字色や背景色などの書式設定操作ができなくなります。ただし「セルの書式設定」が優先されます。
    行の書式設定 指定シートの行単位での、文字色や背景色などの書式設定操作ができなくなります。ただし「セルの書式設定」が優先されます。
    列の削除 指定シートの列を削除できなくします。ただし「セルの書式設定」が優先されます。
    行の削除 指定シートの行を削除できなくします。ただし「セルの書式設定」が優先されます。
    並べ替え 指定シートで「並べ替え」機能を利用できなくします
    オートフィルターの使用 指定シートでは「フィルター(オートフィルター)」機能を利用できなくします。
    ピポットテーブルとピポットグラフを使う 指定シートではピポットテーブルやピポットグラフを利用できなくします。
    オブジェクトの編集 指定シートにある図形オブジェクトなどを、選択や編集できなくします。
    シナリオの編集 指定シートでは「シナリオ」機能を利用できなくします。

    なお「セルの書式設定」のチェックを外すと、「列の書式設定」などにチェックをいれたとしても書式設定は一切できなくなります。

  • VBAのProtectメソッドの引数

    WorksheetオブジェクトのProtectメソッドの引数についてまとめてみました。引数は全て省略可能です。

    引数名 既定値 内容
    1 Password Variant(内部String) (なし) 「シートの保護」を解除するパスワード
    2 DrawingObjects Variant(内部Boolean) True 描画オブジェクト(図形)などを保護する場合はTrue
    3 Contents Variant(内部Boolean) True ロック指定されているセルを保護する場合や、グラフの場合はグラフ全体を保護する場合はTrue
    4 Scenarios Variant(内部Boolean) True 「シナリオ機能」を利用できなくする場合はTrue
    5 UserInterfaceOnly Variant(内部Boolean) False 保護されているセルに対してVBAからの操作は対象外にする場合(VBAからは操作できるようにする)はTrue
    6 AllowFormattingCells Variant(内部Boolean) False セル書式を設定できるようにするにはTrue
    7 AllowFormattingColumns Variant(内部Boolean) False 列単位での書式設定をできるようにするにはTrue
    8 AllowFormattingRows Variant(内部Boolean) False 行単位での書式設定をできるようにするにはTrue
    9 AllowInsertingColumns Variant(内部Boolean) False 列の挿入をできるようにするにはTrue
    10 AllowInsertingRows Variant(内部Boolean) False 行の挿入をできるようにするにはTrue
    11 AllowInsertingHyperlinks Variant(内部Boolean) False ハイパーリンクを挿入できるようにするにはTrue
    12 AllowDeletingColumns Variant(内部Boolean) False 列を削除できるようにするにはTrue
    13 AllowDeletingRows Variant(内部Boolean) False 行を削除できるようにするにはTrue
    14 AllowSorting Variant(内部Boolean) False 「並べ替え」機能を使えるようにするにはTrue
    15 AllowFiltering Variant(内部Boolean) False 「フィルタ」機能を使えるようにするにはTrue
    16 AllowUsingPivotTables Variant(内部Boolean) False 「ピボットテーブル」機能を使えるようにするにはTrue
  • Excelのドキュメントインターフェイス

    マルチドキュメントインターフェイス(MDI)
    アプリケーション内で、複数のドキュメントを開くことができるインターフェイス。
    マルチドキュメントインターフェイス(MDI)
    シングルドキュメントインターフェイス(SDI)
    アプリケーション内でドキュメントは1つだけ。複数のドキュメントがある場合はそのドキュメントの数アプリケーションが開かれる。
    シングルドキュメントインターフェイス(SDI)

    Excelのドキュメントインターフェイスは、Excel 2013からSDIに変更になりました。そのため今まで利用できていた機能やVBAが利用できなくなくなる場合があります。

    UI Excelのバージョン
    マルチドキュメントインターフェイス(MDI) 〜Excel 2010
    シングルドキュメントインターフェイス(SDI) Excel 2013〜
  • ブックの保護

    シートの構成(ワークシートを追加したり削除したり、非表示のワークシートを表示したりなど)を変更できなくするには、校閲タブのブックの保護 - シート構成にチェックを入れることで実現できます。

    エクセルの幅や高さを固定して移動などもできなくする場合は、校閲タブのブックの保護 - ウインドウにチェックを入れます。ただしシングルドキュメントインターフェイスのExcelではウインドウが無効(グレーアウト)されて利用できません