EXCEL VBA シートの保護と保護の解除をする

EXCEL VBA シートの保護と保護の解除をする

以前、EXCELの「シートの保護」についての設定手順を紹介致しました。

数式やタイトルなど、入力をして欲しくないセルに対して、変更をさせない様にするという処理です。

以前の設定については、手動の設定の方法について紹介致しました。

それでは、シートの保護をVBAのプログラムで行うとしたらどうなるかを、今回はご紹介致します。

考え方

ポイントは、以下の流れになります。

①セルの範囲を選択する
②選択した範囲のロックプロパティをtrueにする
③シートに保護をかける

以前のシートの保護の手順と流れは同じです。では、上記のポイントをプログラムに落とし込んでいきましょう。

セルの範囲を選択してLockedプロパティをTrueにする

ポイントの①と②の部分になります。

Rangeオブジェクトは「Locked」プロパティを持っています。選択したRangeオブジェクトに、「Locked」を加筆しましょう。

セルをロックする場合はtrue、セルのロックを解除する場合はfalseにします。

これで選択範囲に対して、シートの保護をかけたらロックされるようになりました。(※この段階では、まだ保護されていません。)

シートの保護

続いて、シートの保護を行います。これはポイントの③の部分になります。シートの保護はProtectメソッドを使います。

※シート名とパスワードは任意の値です。また、上記は、シートを指定していますが、ActiveSheetでも可能です。

この処理で、ロックをかけたセルに対して保護がかかります。これでセルのロックからシートの保護の流れは完了です。

解除する場合(シートの保護解除)

シートの保護を行う上で押さえておきたいのが、シートの保護の解除です。解除する場合は、以下の様に記述します。

 

注意点

シートが保護された状態で、ロックのかかったセルに値を入力しようすると、メッセージが表示されます。

プログラム上でロックのかかったセルに対して処理を行おうとすると、エラーになります。

そのため、処理を行う際には、必ずシートの保護を解除しましょう。また、処理の完了後は再びシートの保護をかけましょう。

予めロックをかける範囲が決まっている場合は、手作業orプログラムでセルのロックを行い、シートの保護と保護解除を行う関数を作っておくと楽です。

そして、処理の前後にシートの保護と保護解除の関数を呼び出すとメンテナンスしやすいと思います。

サンプル

以下のサンプルは、保護と保護の解除を行う処理を関数化して使用する例です。参考にしてみてください。