エクセルVBAでシートの保護を記述します。使用するメソッドはProtectとUnprotectになります。
保護しない操作もあり誤解ないようにしましょう。
スッキリしたコードの書き方も紹介します。
こんにちは じゅんぱ店長 (@junpa33) です。
大事なデータが入っているエクセルシート、時間をかけて作り込んだテンプレートシート、入力内容を指示する項目文字などなど、他の人に壊してほしくないものがたくさんあります。
シートの保護とは、そういった時に利用するエクセルの機能です。
エクセルを管理する立場になる人は、安心安全のためにも、この保護機能について知っておくことが必要です。
- シートの知識
- シートの存在を確認する2種類のコードと実務での例題
- シートクリアーを目的のメソッド別にVBA最速理解
- シートのコピーを最速に理解!VBAコードで異なる結果
- Excelシートを追加・挿入するAddメソッドの使い方
- シートの選択・指定方法とその意味。簡単でも軽視してはダメ
- エクセルシートの名付け・変更と取得そして一覧化するコード
- ワークシートのブック内移動と新規ブックへの移転を分かりやすく
- エクセルシートの並び順が思い通り!シート名一覧で自由自在
- Excelシートを保護する。 記述方法とプロテクトされない操作
- エクセルシートを削除する。Deleteの使い方と注意ポイント
- エクセルシートの非表示コードをパスワード管理するVBA
- ワークシートを変数化する3つの手法 オブジェクト変数など
コンテンツ
シートの保護を行うVBAコード
シートの保護は、エクセルシート上から実行することが出来ます。
また、VBAから実行した場合は、エクセルシート上でのセル操作は保護機能で拒否されるだけでなく、VBE(ビジュアルベーシックエディタ)上からでも、セルの操作についてのVBAコードの実行は拒否されることになります。
シートの保護に関与するメソッド
シートの保護には、Protectメソッド(保護)とUnprotectメソッド(保護解除)を使用します。
さらに保護するProtectメソッドにはパスワード(Password)という引数を指定することが出来ます。
シートオブジェクト.Protect
例.
Activesheet.Protect
Worksheets(“Sheet1”).Protect
シートオブジェクト.Unprotect
例.
Activesheet.Unprotect
Worksheets(“Sheet1”).Unprotect
シートオブジェクト.Protect Password:= ” パスワード “
例.
Activesheet.Protect Password := “9999”
Worksheets(“Sheet1”).Protect Password := “abcd”
シートオブジェクト.Unprotect Password:= ” パスワード “
例.
Activesheet.Unprotect Password := “9999”
Worksheets(“Sheet1”).Unprotect Password := “abcd”
パスワードで使用できる文字は、” 英数字と記号 ”が推奨されています。
では日本語入力は不可かというと、そうではありません。VBAコードで日本語パスワードも設定可能です。
たとえば、 Activesheet.Protect Password := “シートロック” とか
保護されたシートの利用者は、シート上からの操作で「シート保護の解除」によりパスワード入力ボックスから、ワード入力をしてシート保護解除を行います。
(校閲タブからシートの保護解除を選択)
問題はこの入力ボックスにキーボードから入力できる文字は、” 英数字と記号 ”のみ。キーボードから日本語変換しての日本語入力は出来ません。
ただし、コピペからの日本語入力は可能です。なのでその分操作に、ふた手間かかります。
この日本語パスワード設定の不便さを、逆にパスワード解除難易度を上げるための方法にするという考えも出来ます。
シート上では保護かつVBEでは保護解除できるVBAコード
Protectメソッドで、引数UserInterfaceOnly を設定すれば、シート上からはセルの操作は保護され、VBAからのセル操作は保護されずに変更が可能になります。
Sub シート保護VBE解除1()
ActiveSheet.Protect UserInterfaceOnly:=True
Range("B3") = "テスト"
End Sub
シート上からの操作は保護されますが、VBEからはセル入力が可能になります。
VBEからセルに追記入力する場合は次の方法で可能です。
同じプロシージャーに追記する方法
Sub シート保護VBE解除1()
ActiveSheet.Protect UserInterfaceOnly:=True
Range("B3") = "テスト"
Range("B5") = "サンプル"
End Sub
別のプロシージャーで追記する方法
Sub シート保護VBE解除2()
Range("B7") = "例題"
End Sub
シートを、” UserInterfaceOnly:=True ” の状態で終了。エクセルを再度立ち上げます。
シート上からは保護か継続されていますが、VBEも保護された状態に変更されます。
続きでVBA記述でセルに追記しようとした時、エラーが発生します。
Sub シート保護VBE解除2()
Range("B7") = "例題"
End Sub
この場合のエラー回避方法としては、再度、” UserInterfaceOnly:=True ” を記述することで解決します。
Sub シート保護VBE解除3()
ActiveSheet.Protect UserInterfaceOnly:=True
Range("B7") = "例題"
End Sub
VBA記述でのオススメのシート保護コードの書き方
VBAコードを書く時にどの部分でシートの保護コードを記述しようかと迷うことがあります。
そんな時は、迷わず一番最初、変数の宣言前(Dimの上)に記述しましょうと言いたいです。
- 一番最初に保護解除のコード
- 一番最後に保護開始のコード
をオススメします。
書き方のサンプルとしては、このような感じでしょうか。
Sub 何かを実行()
'************
Dim PassWd As String
PassWd = "△△△△"
Worksheets("□□□").Unprotect Password:=PassWd
'************
Dim i As Long
・・・・・・
・・・・・・
・・・・・・
Worksheets("□□□").Protect Password:=PassWd
End Sub
UnprotectとProtect内でVBAの実行コードを記述するという方法です。
パスワード変更は、はじめの PassWd = “△△△△” を変更するだけです。
シートの保護では保護できない操作
以下の項目はいずれもシート保護に関係なく実行することが出来ます。
これらの操作を保護するのはブックの保護の範疇になるということです。
これらの操作を止める(不可)にするためには、エクセルBOOK自体を保護する必要があります。
保護されたシートを選択する
「シートの選択」の操作は保護の機能とは切り離された操作です。どのような保護状態でも操作可能です。
Sub シート保護外1()
ActiveSheet.Protect
Worksheets("Sheet1").Select
End Sub
指定のシートのセルに値を入力する
保護対象外のシートのセルへの操作なので実行可能です。
Sub シート保護外2()
ActiveSheet.Protect
Worksheets("Sheet2").Range("B3") = "テスト"
End Sub
保護されたシートを移動する
シートのセルに対しての変更操作ではないので実行可能です。
Sub シート保護外3()
ActiveSheet.Protect
ActiveSheet.Move after:=Worksheets(Worksheets.Count)
End Sub
保護されたシートの名前を変更する
シート名を変更することも可能です。
Sub シート保護外4()
ActiveSheet.Protect
ActiveSheet.Name = "TESTsheet"
End Sub
保護されたシートをコピーする
シートをコピーすることも出来ます。ただし、この場合はコピーされたシートの保護状態は引き継がれません。
Sub シート保護0外5()
ActiveSheet.Protect
ActiveSheet.Copy after:=Worksheets(1)
End Sub
Sub シート保護0外5_1()
ActiveSheet.Protect
ActiveSheet.Cells.Copy Destination:= _
Worksheets("Sheet3").Range("A1")
End Sub
こちらのコードでも同様に、Sheet3にコピーが実行されますがシートの保護は引き継がれません。
保護されたシートを削除する
保護されたシートを削除することも出来ます。
Sub シート保護外6()
ActiveSheet.Protect
ActiveSheet.Delete
End Sub
まとめ
シートの保護とは、保護対象のシートのセルの変更に対してプロテクトするということです。
さらに関連項目としてセルの保護についても知っておく必要があります。
「セルの保護」の設定VBAを最速理解テンプレートシートなどの場合は、入力要求のための項目のセルを保護したいとか、自動計算表示のセルを保護したいとかあると思います。
こうしたケースでは、セルの保護とシートの保護は1セットで考える必要があります。
また、セルを編集変更しなければ、シートをコピーしたり移動したり削除さえしてもプロテクトの対象の変更とはなりません。
セルの保護がシートの保護を有効にしないといけないのと同じように、これらのシート自体の変更への保護はブックの保護を有効にするようにしてください。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。