Excelで作成したシートを共有していると、うっかり数式を消されたり、他の人に勝手に編集されたりして困ることはありませんか?
VBAを使えば「Protectメソッド」「Unprotectメソッド」でシートやブックを効率的に保護/解除できます。
本記事では 基礎の使い方から、パスワード付き保護・一部セルだけ編集可・実務で使えるサンプルコード までわかりやすく解説します。
【Excel VBA】Protect・Unprotectメソッドでシートやブックを保護する方法
シートを保護する(Protectメソッドの基本)
例えば「入力用シート」を誤って編集されないように保護したい場合は、以下のように書きます。
Sub Protect_InputSheet()
Worksheets("入力用").Protect
End Sub
これで「入力用」という名前のシートが保護され、セル編集や行削除などができなくなります。
シート保護を解除する(Unprotectメソッドの使い方)
解除したいときはUnprotect
メソッドを実行します。
Sub Unprotect_InputSheet()
Worksheets("入力用").Unprotect
End Sub
パスワード付きでシートを保護する
共有ブックなど、他人に勝手に編集されたくない場合はパスワードを設定しましょう。
Sub Protect_WithPassword()
Worksheets("入力用").Protect Password:="abcd1234"
End Sub
解除する場合も同じパスワードを指定します。
Sub Unprotect_WithPassword()
Worksheets("入力用").Unprotect Password:="abcd1234"
End Sub
一部のセルだけ編集できるようにする方法
例えば「入力用シート」で「B2:B10」だけは編集できるようにし、それ以外はロックしたい場合は次のように設定します。
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
これで入力欄は自由に使えますが、計算式や見出しは守られます。
ブックを保護する
シートだけでなく、ブック全体の構造(シートの追加・削除など)を守りたい場合もあります。
Sub Protect_Workbook()
ThisWorkbook.Protect Password:="abcd1234"
End Sub
解除するときは次のようにします。
Sub Unprotect_Workbook()
ThisWorkbook.Unprotect Password:="abcd1234"
End Sub
マクロで使える保護設定:UserInterfaceOnly
シートを保護すると、マクロからの操作も制限されてしまいます。
その場合は、UserInterfaceOnly
を使えばユーザー操作は制限するが、マクロでは操作できるという便利な設定が可能です。
Sub Protect_ForMacro()
Worksheets("入力用").Protect Password:="abcd1234", UserInterfaceOnly:=True
End Sub
実務で使えるサンプルコード:入力欄だけ編集可能にするシート保護マクロ
以下のコードは、毎回ブックを開いたときに自動で「入力欄だけ編集可能」に設定する実務的な例です。
勤怠表や売上管理シートなど、ユーザーに入力してほしいセル範囲だけを開放し、それ以外は保護して守ります。
' ▼ 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を業務で使うときに「数式を守りつつ入力欄は解放したい」シーンは非常に多いです。
ぜひ本記事のコードをコピーして、あなたの業務に取り入れてみてください。
コメント