\ お問い合わせはこちら! /

【Excel VBA入門】Protect/Unprotectメソッドの使い方|シートやブックをパスワードで保護する方法

Excelで作成したシートを共有していると、うっかり数式を消されたり、他の人に勝手に編集されたりして困ることはありませんか?

VBAを使えば「Protectメソッド」「Unprotectメソッド」でシートやブックを効率的に保護/解除できます。

本記事では 基礎の使い方から、パスワード付き保護・一部セルだけ編集可・実務で使えるサンプルコード までわかりやすく解説します。

【Excel VBA】Protect・Unprotectメソッドでシートやブックを保護する方法

シートを保護する(Protectメソッドの基本)

例えば「入力用シート」を誤って編集されないように保護したい場合は、以下のように書きます。

VB
Sub Protect_InputSheet()
    Worksheets("入力用").Protect
End Sub

これで「入力用」という名前のシートが保護され、セル編集や行削除などができなくなります。

シート保護を解除する(Unprotectメソッドの使い方)

解除したいときはUnprotectメソッドを実行します。

VB
Sub Unprotect_InputSheet()
    Worksheets("入力用").Unprotect
End Sub

パスワード付きでシートを保護する

共有ブックなど、他人に勝手に編集されたくない場合はパスワードを設定しましょう。

VB
Sub Protect_WithPassword()
    Worksheets("入力用").Protect Password:="abcd1234"
End Sub

解除する場合も同じパスワードを指定します。

VB
Sub Unprotect_WithPassword()
    Worksheets("入力用").Unprotect Password:="abcd1234"
End Sub

パスワードは大文字・小文字を区別します。
また、間違ったパスワードを指定すると解除できません。

一部のセルだけ編集できるようにする方法

例えば「入力用シート」で「B2:B10」だけは編集できるようにし、それ以外はロックしたい場合は次のように設定します。

VB
Sub Protect_AllowInput()
    Dim ws As Worksheet
    Set ws = Worksheets("入力用")
    
    ' 一度すべてのセルをロック
    ws.Cells.Locked = True
    
    ' 入力欄(B2:B10)だけロック解除
    ws.Range("B2:B10").Locked = False
    
    ' 保護を有効化
    ws.Protect Password:="abcd1234"
End Sub

これで入力欄は自由に使えますが、計算式や見出しは守られます。

ブックを保護する

シートだけでなく、ブック全体の構造(シートの追加・削除など)を守りたい場合もあります。

VB
Sub Protect_Workbook()
    ThisWorkbook.Protect Password:="abcd1234"
End Sub

解除するときは次のようにします。

VB
Sub Unprotect_Workbook()
    ThisWorkbook.Unprotect Password:="abcd1234"
End Sub

マクロで使える保護設定:UserInterfaceOnly

シートを保護すると、マクロからの操作も制限されてしまいます。
その場合は、UserInterfaceOnlyを使えばユーザー操作は制限するが、マクロでは操作できるという便利な設定が可能です。

VB
Sub Protect_ForMacro()
    Worksheets("入力用").Protect Password:="abcd1234", UserInterfaceOnly:=True
End Sub

この設定はブックを閉じるとリセットされます。
毎回ブックを開いたときに再設定する必要があります。

実務で使えるサンプルコード:入力欄だけ編集可能にするシート保護マクロ

以下のコードは、毎回ブックを開いたときに自動で「入力欄だけ編集可能」に設定する実務的な例です。

勤怠表や売上管理シートなど、ユーザーに入力してほしいセル範囲だけを開放し、それ以外は保護して守ります。

VB
' ▼ ThisWorkbook モジュールに記述 ▼
Private Sub Workbook_Open()
    Call ProtectInputSheet
End Sub

' ▼ 標準モジュールに記述 ▼
Sub ProtectInputSheet()
    Dim ws As Worksheet
    Set ws = Worksheets("入力用")

    ' いったん全セルをロック
    ws.Cells.Locked = True
    
    ' 入力欄(B2:D50)だけ編集可能に設定
    ws.Range("B2:D50").Locked = False
    
    ' マクロからの操作は許可(UserInterfaceOnly:=True)
    ws.Protect Password:="abcd1234", UserInterfaceOnly:=True
End Sub

Workbook_Openイベントとして呼び出すことで、ブックを開いた時にProtectInputSheetが呼び出されるようにしました。

このコードではB2:D50 の範囲だけ編集でき、その他のセルは保護される状態になります。

UserInterfaceOnly:=True としたことにより、ユーザーの手作業では編集不可にしつつ、マクロからは編集できるようになります。

まとめ

最後に、本記事の内容をまとめます。

  • Protectメソッドでシートやブックを保護できる
  • Unprotectメソッドで簡単に解除可能
  • パスワードを付ければセキュリティ強化できる
  • 一部セルだけ編集可能にする設定も可能
  • UserInterfaceOnlyを使えば「ユーザー操作は制限、マクロ操作は許可」ができる
  • Workbook_Openイベントを使えば、ブックを開いた時に自動で保護が適用される

Excelを業務で使うときに「数式を守りつつ入力欄は解放したい」シーンは非常に多いです。

ぜひ本記事のコードをコピーして、あなたの業務に取り入れてみてください。

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

メイン言語はPython。本ブログでは、実務や普段の学習で学んだことをアウトプットしています。
基本情報技術者試験合格者。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)