エクセルにはシート保護の機能があります。
例えば様々な人が1つのファイルを編集する際によくある問題として
関数を消したり、行・列を挿入したり、結合したりなどで本来の動作が機能しなくなる場合があります。
このような問題を防止するためにシートの保護という、設定したセルのみ入力・編集・選択できる機能があるのですが、VBAでも設定ができます。
通常のシートの保護・解除についてはこちらから☟
【シートの保護・解除】入力・選択を制限!一部の対象・設定したセルのみ編集可能・解除する方法 ► 独学エクセル塾 (dokugakuexcel.com)
それでは見ていきましょう
■忙しい人向けのコピペ用プログラム
赤文字のシートの名前をカスタムして使用してください
Sub シートの保護()
Sheet("ここにシート名を入力").Protect
End Sub
⬛︎こんなことができるようになる!
・アクティブ・指定・全シートの保護と解除ができるようになる
⬛︎シート保護・解除の構文
保護の構文
・アクティブシートの保護
ActiveSheet.Protect
・指定シートの保護
Sheets(“シート名”).Protect
・指定シート番号の保護
Worksheets(シート番号).Protect
保護の解除の構文
・アクティブシートの保護の解除
ActiveSheet.Unprotect
・指定シートの保護の解除
Sheets(“シート名”).Unprotect
・指定シート番号の保護の解除
Worksheets(シート番号).Unprotect
※全シートの保護・解除方法は本記事終盤にまとめています。
目次から飛んで見てください
⬛︎シートを保護する
まずはシートの保護する方法から見ていきましょう。
・アクティブシートの保護
まずはアクティブシートの保護方法です。
アクティブシートとは現在選択中・作業中のシートを指します。
構文を再確認しましょう。
ActiveSheet.Protect
シンプルで、このプログラムのみで動きます。
では見本で下記のプログラムを作成しました。
Sub シートの保護()
ActiveSheet.Protect
End Sub
それではプログラムを実行してみましょう。
実行前は保護していないので「シートの保護」が選べるようになっています。
実行した結果はこちらです。
シートが保護状態になったので「シートの保護の解除」となっていますね。
これで現在選択中のシートの保護をすることができました。
・指定シートの保護
先ほどはアクティブシートの保護でしたが、今度は指定シートの保護方法を見ていきましょう。
構文は下記の通りです。
Sheet(“シート名“).Protect
こちらはシート名を入力する必要があります
それでは例で「見本シート」の保護をしてみましょう。
プログラムはこのようになります。
Sub シートの保護()
Sheet(“見本シート“).Protect
End Sub
こちらのプログラムを実行することで「見本シート」を保護することができます。
・シート番号を指定して保護
今度はシート番号を指定して、該当するシートを保護してみましょう。
○番目のシートを保護したい時など、シート番号がわかっている時には便利です。
構文はこちら。
Worksheet(シート番号).Protect
引数にシート番号を入力します。
数値が格納された変数を用いても構いません。
では例で3番目のシートを保護したいと思います。
プログラムはこのようになります。
Sub シートの保護()
Worksheet(3).Protect
End Sub
こちらのプログラムを実行することで「3番目のシート」を保護することができます。
⬛︎シートの保護を解除する
先ほどまでは保護方法についてみていきましたが、今度は保護の解除方法を紹介します。
方法は簡単で「 Protect」の部分を「Unprotect」にするだけです。
内容は保護と変わらないので構文のみ紹介します。
・アクティブシートの保護の解除 ActiveSheet.Unprotect ・指定シートの保護の解除 Sheets("シート名").Unprotect ・指定シート番号の保護の解除 Worksheets(シート番号).Unprotect
では例でアクティブシートの保護の解除をしてみましょう。
プログラムはこのようになります。
Sub シートの保護解除()
ActiveSheet.Unprotect
End Sub
実行前は保護状態なので「シートの保護の解除」が選べるようになっています。
実行した結果はこちらです。
シートの保護が解除状態になったので「シートの保護」となっていますね。
これでアクティブシートの保護を解除することができました。
⬛︎全シートの保護・保護の解除をする
これまでは1つのシートの保護・解除を紹介しましたが、
ブック内の全シートの保護・解除をする方法も紹介します。
使用するのはFor. Eachの繰り返し動作です。
ではプログラムを見てみましょう。
Sub すべてのシートの保護()
Dim A As Worksheet
For Each A In Sheets
A.Protect
Next AEnd Sub
「For Each A In Sheets」でブック内のシートを1つずつ巡り、
保護を繰り返す仕組みです。
これで全てのシートの保護ができるようになります。
「Protect」の部分を「Unprotect」に変更すると全シートの保護の解除ができます。
⬛︎パスワードを含めたシートの保護・パスワード付きの保護の解除
シートの保護にはパスワードを設定することができます。
ではパスワードを設定するときのシートの保護・解除の構文をみてみましょう。
ActiveSheet.Protect Password:=”設定したいパスワード“
では見本でパスワードを「0123」で保護したいと思います。
プログラムはこのようになりました。
Sub パスワードを含めたシートの保護()
ActiveSheet.Protect Password:=”0123“
End Sub
実行後に解除しようとするとパスワードが求められるようになりました。
パスワードは「0123」で設定したので「0123」を入力すると解除できます。
解除のプログラムも同様です。
「 Protect」の部分を「Unprotect」にするだけでその他は保護と一緒です。
見本の下記のプログラムをごらんください。
Sub パスワードを含めたシートの保護の解除()
ActiveSheet.Unprotect Password:=”0123“
End Sub
パスワードを「0123」でシートの保護を解除する処理プログラムを実行することができます。
⬛︎よくあるエラーと対象方法
・実行時エラー9 インデックスが有効範囲にありません
こちらは指定シート名・番号が正確でない可能性があります。
よくある原因としてはシートに半角のスペースが入っていたり、対称にVBAプログラムに半角スペースが入っている可能性があります。
1語1句同じでないと保護・解除できないので再度、シート名・プログラムを確認してみてください。
その点、「ActiveSheet.Protect」や「Worksheets(シート番号).Protect」は
シート名を入力しなくて済むので、このようなエラーの予防になりそうですね。
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください☟
Worksheet.Protect メソッド (Excel) | Microsoft Docs
⬛︎まとめ
いかがだったでしょうか。
折角作成したシートが別の人が関数を消したり、行・列挿入してVBAが機能しなくなるなどよく聞く話です。
入力する人・シートを管理する人に分けて
シートを管理する人のみシート保護の解除のパスワードを共有すれば
このようなミスは防ぐことができます。
是非参考にしてみてください。
コメント