【エクセルVBA】シートの追加も削除も、名前さえ変えさせない!VBAでブックの保護を設定する方法

ブックの保護,eyecatch,protect,excel,vba
皆様こんにちは、ノグチです。

VBAでエクセルツールを作ったはいいけれど、「シートを追加されたり、削除されてしまうとマクロが動かなくなってしまう」「シートの名前を変えられるのも困る」

そんなお悩みはありませんか?

前回までにご紹介した、WorksheetオブジェクトのProtectメソッドを使ったシートの保護設定では、シート内容は編集できないようにできても、ブック内のシートの名前を変更したり、シートを追加・削除したりといったシートに対する操作に対しては管轄外なんですよね。

でもご安心を。ちゃんとブックの保護ができるメソッドも用意されていますよ。

それがWorkbookオブジェクトのProtectメソッドとUnprotectメソッド

今回はこのメソッドを使って、エクセルVBAでブックの保護設定と、ブックの保護を解除する方法をご紹介します!

ブックの保護とはなんぞや?や、何ができるのか?は下記記事でご紹介していますので、こちらをご覧くださいませ。

【Excel】勝手なシート操作を防ぐ!初心者向けのブックの保護設定
VBAでシート操作を行うエクセルツールにとって、使う人が勝手にシート構成を変更できてしまうのは避けたいところ。エクセルのシート操作(名前の変更、挿入、削除、移動、コピー)を制限する機能、ブックの保護の設定と解除方法をご紹介しています。パスワードを設定しておけば、特定の人だけが編集できるようにすることもできますよ。
スポンサーリンク

ブックの保護を設定する

Protectメソッドの記述方法

VBAでブックの保護を設定するには、WorkbookオブジェクトのProtectメソッドを使います。

このメソッドは、Workbookオブジェクトに対してブックの保護を設定してくれるメソッドです。

記述方法はこちら。

Workbookオブジェクト.Protect

Protectメソッドでブックの保護を設定する

では早速Protectメソッドを使ってブックを保護してみましょう。

下の表のB列「数量」とC列「単価」を乗算して、D列「合計」にその計算結果を出力、最後にブックの保護を設定する、というコードを使います。

ブックの保護,protect,計算表,vba

コードはこちら。

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.Protect

End Sub

このコードを実行して、シートの名前を変更しようとすると…

ブックの保護,protect,実行例,シート名変更

この通り、ブックの保護が設定されて、シートの名称変更ができないようになっています

さらに、シートにマウスカーソルを当てて右クリックをしてみると、

この通り、シートの挿入や削除、名前の変更やコピーまで選択できないようになっています。

これで、ブックの保護が設定できました!

ブックの保護を解除する

Unprotectメソッドの記述方法

ブックの保護が設定できたところで、お次はその解除方法をご紹介します。

ブックの保護を解除するために使うのは、ブックの保護を解除するためのメソッド、WorkbookオブジェクトのUnprotectメソッドです。

記述方法はこちら。

Workbookオブジェクト.Unprotect

このメソッドを使えば、Protectメソッドで設定したブックの保護だけでなく、手動で設定したブックの保護も解除することができます

Unprotectメソッドでブックの保護を解除する

では実際に、Unprotectメソッドを使ってブックの保護を解除してみます

Protectメソッドの項でお見せした、ブックの保護を設定したブックで下記のコードを実行してみます。

Sub ブックの保護を解除()

ThisWorkbook.Unprotect

End Sub

では、ちゃんとブックの保護が解除されたか確認するために、シートの名前を「表1」から「計算結果」に変更してみましょう。

ブックの保護,unprotect,シート名変更,vba

この通り、ブックの保護が解除されてシートの名前が「計算結果」に変更できるようになっています

念のためシートのタブにマウスカーソルを合わせて右クリックメニューを表示してみると…

ブックの保護,unprotect,vba,右クリックメニュー

こちらも図の通り、シートの挿入、削除、コピーも選択できるようになっていますね

これでブックの保護が解除できました!

最後に

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

今回は、VBAでブックの保護設定と解除の方法をご紹介しました。

ツールによっては、VBAで計算やデータ加工した結果をユーザに見せるだけにしたい、というものあるでしょう。そんなときは、VBAのデータの加工処理のコードの後にシートとブックの保護を設定するコードを加えておけば、人間の手動によるシート内容の変更や、シートの追加や削除を防ぐことができます。

作成したツールや、変更させたくないものの内容によって、シートの保護とブックの保護を組み合わせたり、或いは使い分けてみてくださいね

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

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

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