皆様こんにちは、ノグチです。
VBAでツールを作ったはいいものの、使う人に勝手にシートを変更されてVBAが動かなくなってしまったことはありませんか?
「シートの保護でセルの変更を制限することはできるけど、VBAだけはセル操作させたい…」
また、「シートの保護を設定したシートのセルの値をVBAで変更したい」ということもありますよね。
そんなときに使えるのが、Worksheetオブジェクトの「Protect」メソッドと「Unprotect」メソッドです。
今回はこの2つのメソッドを使って、VBAでシートの保護設定と、解除する方法をご紹介します!
Protectメソッドとは
下記の記事で手動でシートの保護を設定する方法をご紹介しましたが、このメソッドを使えば、VBAにシートの保護設定をさせることができるのです。
このWorksheetオブジェクトには、シートの保護を設定したいシートを指定します。
Protectメソッドでシートの保護を設定する
では早速このProtectメソッドを使って、シートの保護を設定してみましょう。
下図の表のB列とC列を乗算して、D列に乗算の結果を出力するコードを用意しました。
Sub 計算処理() Dim rowc As Long '処理行数カウンター rowc = 2 Do While Cells(rowc, 1).Value <> "" 'B列とC列を乗算して、D列に結果を表示する Cells(rowc, 4).Value = Cells(rowc, 2).Value * Cells(rowc, 3).Value '次の行へ rowc = rowc + 1 Loop ThisWorkbook.Worksheets("Sheet1").Protect End Sub
Unprotectメソッドとは
お次はシートの保護をVBAで解除する方法のご紹介です。
シートの保護をVBAで解除するには、Unprotectメソッドを使います。
Unprotectメソッドは、シートの保護を解除するためのメソッドです。
UnprotectメソッドもProtectメソッドと同様に、Worksheetオブジェクトにはシートの保護を解除したいシートを指定してくださいね。
Unprotectメソッドでシートの保護を解除する
では、実際にUnprotectメソッドを使って、シートの保護を解除してみましょう。
Sub シートの保護解除() ThisWorkbook.Worksheets("Sheet1").Unprotect End Sub
この通り、シートの保護が解除されてセルの値が変更できるようになりました!
手動でもそうですが、シートの保護は解除しても特にメッセージなどは表示されません。
セルの値が変更できるようになっていればシートの保護は解除されていますし、エクセルメニューにある「シートの保護」が緑色にハイライトされていなければ、シートの保護は解除されています。
ちなみに、手動で設定したシートの保護は、このUnprotectメソッドを使って解除することができます。
最後に
いかがでしたでしょうか。
今回は、ProtectメソッドとUnprotectメソッドを使って、シートの保護、シートの解除方法についてご紹介しました。
シートの保護は手動でも設定できますが、手動だとシートの保護の設定を忘れてしまいがちです。
このシートの保護に限らず、手動での操作は私たちが考えている以上にミスをしてしまったり、処理が漏れたりしてしまうもの。
毎回設定が必要と分かっているなら、はじめからVBAで自動化してしまった方が手間が省けることと、何より確実です。
今回は単純なシートの保護と解除の方法をご紹介しました。
もちろんパスワードを使ったシートの保護の設定や、マクロだけはシート上での操作を許可する方法もありますよ。
こちらは次回以降の記事でご紹介していきます。
それでは、最後までお読みいただきありがとうございました!
マクロだけ操作可能なシート保護の設定方法を、以下記事で紹介していますので、こちらもご覧ください。