【エクセルVBA】VBAでパスワード付のシートの保護を設定・解除する方法


Protect,password,シートの保護解除,パスワード
皆様こんにちは、ノグチです。
今回は、同じくProtectメソッドのPasswordオプションを使ったパスワード付のシートの保護設定と、UnpotectメソッドのPasswordオプションを使ったシートの保護解除の方法をご紹介していきます。

パスワードなしのシートの保護は簡単に解除されてしまう

まずシートの保護を設定ですが、 手動で設定したか、前回ご紹介したVBAのProtectメソッドのUserInterfaceOnlyオプションで設定したかによらず、 そのままだとエクセルツールメニューの「シートの保護解除」で簡単に解除されてしまいます。

そんな事態を防ぐために使えるのが、同じくProtectメソッドのPasswordオプション。

Passwordオプションは、シートの保護に対してパスワードを設定することができるオプションです。

このオプションを使ってパスワード付のシートの保護を設定しておけば、エクセルツールメニューから「シートの保護解除」をクリックされたとしても、パスワードを知られていない限りシートの保護が解除されることはありません。

Password オプションの記述方法

Password オプションの記述方法はこちら。 
Worksheetオブジェクト.Protect  Password:=”指定したいパスワード”
ここで指定するパスワードは、手動のシートの保護設定のパスワードと指定と同様に、半角英数字を使うことができます。

使用例

passwordオプションの使用例はこんな感じです。

前回ご紹介したUserInterfaceOnlyオプションと組み合わせて、B列とC列の計算処理を行い、パスワード付のシートの保護を設定する内容にしています。

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 Password:="Password001"

End Sub
VBAを実行してシートをクリックしてみると…
vba,エクセル,protect,password,実行結果

この通り、ちゃんとシートの保護が設定されていますね。

では、エクセルツールメニューから「シートの保護解除」をクリックしてみると…
vba,エクセル,protect,password,実行結果,パスワード入力
この通り、パスワード入力のウインドウが表示されて、パスワード付のシートの保護が設定されていることがわかります

シートの保護を解除する

Passwordオプションでパスワード付のシートの保護を解除する 

パスワード付のシートの保護設定をご紹介したところで、UnprotectメソッドのPasswordオプションを使った解除の方法のご紹介です。

Passwordオプションはパスワード付のシートの保護を解除するためのオプションで、このオプションを指定すると、パスワード付きのシートの保護が解除できます。

パスワード付のシートの保護を解除する際にこのオプションを指定しなかった場合は、手動でシートの解除を行うときと同様、パスワード入力のポップアップが表示されるようになります。

Passwordオプションの記述方法

Passwordオプションの記述方法はこちら。
Worksheetオブジェクト.Unprotect Password:=”シートの保護で指定したパスワード”

使用例

 UnprotectメソッドのPasswordオプションの使用例として、上のProtectメソッドの項で使った例で設定したシートの保護設定を解除するコードを用意しました。

ProtectメソッドのPasswordオプションで指定したパスワードを指定しています。

Sub UnprotectSheet()

ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password001"

End Sub

これで、パスワード付のシートの保護が解除されます。

ちなみに、Unprotectメソッドでシートの保護を解除しても、特にメッセージなどは表示されないので、場合によってはUnprotectメソッドの後にMsgBox関数などを使って、シートの保護が解除された旨のメッセージを表示させるのもいいかもしれません。

最後に

今回は、ProtectメソッドとUnprotectメソッドのPasswordオプションをご紹介しました。

前回ご紹介したUserInterfaceOnlyオプションと組み合わせて使用すれば、エクセルを勝手にユーザに操作される心配も少なくなりますね

次回は、ブックの保護をVBAで行う方法を下記でご紹介していますので、こちらも併せてご覧ください。

【エクセルVBA】シートの追加も削除も、名前さえ変えさせない!VBAでブックの保護を設定する方法
エクセルVBAのProtect/Unprotectメソッドを使ったブックの保護設定と、解除の方法をご紹介しています。このメソッドをvbaでの処理のためシートの追加や削除をされたくないエクセルツールに仕込んでおけば、ユーザによる勝手なシートの追加や削除、名前の変更を防ぐことができるようになります。

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

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

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

コメント

  1. Pen Guin より:

    いつもお世話になっております。

    この方法では、VBEを覗かれたらパスワードがバレてしまい、パスワードとしての機能を果たしていないような気がするのですが、それは致し方ないのでしょうか。

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