【エクセルVBA】Protect/Unprotectメソッドでシートの保護設定と解除をする方法


excel,vba,protect,unprotect,エクセル,シートの保護

皆様こんにちは、ノグチです。

VBAでツールを作ったはいいものの、使う人に勝手にシートを変更されてVBAが動かなくなってしまったことはありませんか?

「シートの保護でセルの変更を制限することはできるけど、VBAだけはセル操作させたい…」

また、「シートの保護を設定したシートのセルの値をVBAで変更したい」ということもありますよね。

そんなときに使えるのが、Worksheetオブジェクトの「Protect」メソッドと「Unprotect」メソッドです。

今回はこの2つのメソッドを使って、VBAでシートの保護設定と、解除する方法をご紹介します!

Protectメソッドは、指定したシートに対して「シート保護」を設定するメソッドです。

下記の記事で手動でシートの保護を設定する方法をご紹介しましたが、このメソッドを使えば、VBAにシートの保護設定をさせることができるのです。

Worksheetオブジェクト.Protect

このWorksheetオブジェクトには、シートの保護を設定したいシートを指定します。

Protectメソッドでシートの保護を設定する

では早速このProtectメソッドを使って、シートの保護を設定してみましょう。

下図の表のB列とC列を乗算して、D列に乗算の結果を出力するコードを用意しました。

このVBAで出力した結果があるシートに、Protectメソッドを使ってシートの保護を設定してみましょう。

protectメソッド,例,表

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
このVBAコードを実行したあと、セルの値を変更しようとすると…

protectメソッド,シートの保護,実行結果

この通り、シートの保護が設定されて、セルの値が変更できないようにすることができました!

Unprotectメソッドとは

お次はシートの保護をVBAで解除する方法のご紹介です。

シートの保護をVBAで解除するには、Unprotectメソッドを使います。

Unprotectメソッドは、シートの保護を解除するためのメソッドです。

記述方法はこちら。
Worksheetオブジェクト.Unprotect

UnprotectメソッドもProtectメソッドと同様に、Worksheetオブジェクトにはシートの保護を解除したいシートを指定してくださいね。

Unprotectメソッドでシートの保護を解除する

では、実際にUnprotectメソッドを使って、シートの保護を解除してみましょう。

Protectメソッド使ってシートの保護を設定したシートを対象に、下のコードでシートの保護を解除してみます。
Sub シートの保護解除()

ThisWorkbook.Worksheets("Sheet1").Unprotect

End Sub

この通り、シートの保護が解除されてセルの値が変更できるようになりました!

unprotect,VBA実行結果

手動でもそうですが、シートの保護は解除しても特にメッセージなどは表示されません。

セルの値が変更できるようになっていればシートの保護は解除されていますし、エクセルメニューにある「シートの保護」が緑色にハイライトされていなければ、シートの保護は解除されています。

ちなみに、手動で設定したシートの保護は、このUnprotectメソッドを使って解除することができます。

また逆に、Protectメソッドで設定したシートの保護は、エクセルのツールメニューにある「シートの保護解除」をクリックして解除することもできますよ。

最後に

いかがでしたでしょうか。

今回は、ProtectメソッドとUnprotectメソッドを使って、シートの保護、シートの解除方法についてご紹介しました。

シートの保護は手動でも設定できますが、手動だとシートの保護の設定を忘れてしまいがちです。

このシートの保護に限らず、手動での操作は私たちが考えている以上にミスをしてしまったり、処理が漏れたりしてしまうもの。

毎回設定が必要と分かっているなら、はじめからVBAで自動化してしまった方が手間が省けることと、何より確実です。

今回は単純なシートの保護と解除の方法をご紹介しました。

もちろんパスワードを使ったシートの保護の設定や、マクロだけはシート上での操作を許可する方法もありますよ。

こちらは次回以降の記事でご紹介していきます。

それでは、最後までお読みいただきありがとうございました!

 

マクロだけ操作可能なシート保護の設定方法を、以下記事で紹介していますので、こちらもご覧ください。

【エクセルVBA】保護しているシートでマクロの操作だけ有効にする方法
ProtectメソッドのUserInterfaceOnlyオプションを使った、エクセルのシートの保護を設定する方法をご紹介しています。これを使えば、ユーザのシート内容の操作は制限しつつ、VBAはシート内の操作が可能なシートの保護が設定できますよ。

 

連載目次:エクセル&VBAでブックやシートの保護をするテクニック

エクセルやVBAで「このシートは消されると困る」とか、「シートの名前を変えられるとVBAが動かなくなる」といった悩み、ありますよね。そんな時は「保護」をして操作ができないようにすることができます。本シリーズではエクセルやエクセルVBAでブックやシートの保護をするテクニックについてお伝えします。
  1. 【Excel】勝手な編集は許しません!初心者向けのシート保護設定
  2. 【Excel】勝手なシート操作を防ぐ!初心者向けのブックの保護設定
  3. 【エクセルVBA】Protect/Unprotectメソッドでシートの保護設定と解除をする方法
  4. 【エクセルVBA】保護しているシートでマクロの操作だけ有効にする方法
  5. 【エクセルVBA】VBAでパスワード付のシートの保護を設定・解除する方法
  6. 【エクセルVBA】シートの追加も削除も、名前さえ変えさせない!VBAでブックの保護を設定する方法

タイトルとURLをコピーしました