はじめに
「計算式が入力されたセルだけを保護して、他の人が誤って数式を壊すのを防ぎたい」「でも、数値を入力するセルは自由に編集できるようにしたい」
複数人で共有するExcelファイルでは、このような場面がよくありますよね。手作業で一つずつセルのロックを設定するのは非常に面倒ですが、VBAを使えばこの処理を瞬時に自動化できます。
この記事では、シート内の数式が入ったセルだけをロックし、それ以外のセルは編集可能な状態でシートを保護する、実用的なVBAマクロをご紹介します。
セルの保護の仕組み
Excelのシート保護は、以下の2つの設定が組み合わさって機能します。
- セルの「ロック」属性: 全てのセルには、書式設定に「ロック」というチェックボックスがあります(デフォルトはオン)。
- 「シートの保護」機能: 「シートの保護」を実行すると、上記で「ロック」がオンになっているセルが編集不可になります。
つまり、「数式セルだけを保護」するには、以下の手順を踏めばよいことになります。
- まず、シートの全てのセルの「ロック」を一旦解除する。
- 次に、数式が入力されているセルだけを探し出し、それらのセルの「ロック」を再度オンにする。
- 最後に、「シートの保護」を実行する。
数式セルのみを保護するVBAサンプルコード
以下のコードは、現在アクティブになっているシートを対象に、上記の3ステップを実行します。
完成コード
' 現在のシートで、数式セルのみを保護する
Sub ProtectFormulaCellsOnly()
' 変数を定義します
Dim targetSheet As Worksheet
Dim formulaCells As Range
' 対象のシートを設定(現在アクティブなシート)
Set targetSheet = ActiveSheet
' --- 保護を一旦解除(既に保護されている場合のエラー回避)---
targetSheet.Unprotect
' --- ステップ1: 全てのセルのロックを解除 ---
targetSheet.Cells.Locked = False
On Error Resume Next ' 数式セルがない場合にエラーになるのを防ぐ
' --- ステップ2: 数式セルだけを探してロックする ---
Set formulaCells = targetSheet.Cells.SpecialCells(xlCellTypeFormulas)
If Err.Number = 0 Then
formulaCells.Locked = True
End If
On Error GoTo 0
' --- ステップ3: シートを保護する ---
' パスワードを設定しない場合は引数を省略
targetSheet.Protect
MsgBox "数式セルのみを保護しました。", vbInformation
End Sub
コードの解説
targetSheet.Unprotect
マクロを再実行した際に、既にシートが保護されているとエラーになるため、最初に保護を解除しています。
targetSheet.Cells.Locked = False
シート上の全てのセル(.Cells
)のロック(.Locked
)を一旦False
(オフ)にしています。これで、全てのセルが編集可能な状態になります。
Set formulaCells = targetSheet.Cells.SpecialCells(xlCellTypeFormulas)
このコードの最も重要な部分です。
.SpecialCells
メソッドは、特定の条件に一致するセルをまとめて取得する機能です。xlCellTypeFormulas
は、その条件として「数式が入力されているセル」を指定しています。On Error Resume Next
は、シートに数式セルが一つもなかった場合にエラーで止まるのを防ぐためのおまじないです。
formulaCells.Locked = True
SpecialCells
で見つけ出した数式セルのかたまり(formulaCells
)に対して、ロック(.Locked
)をTrue
(オン)に設定しています。
targetSheet.Protect
最後にシートを保護します。これで、ロックがオンになっている数式セルだけが編集できなくなります。パスワードをかけたい場合は targetSheet.Protect "password"
のように記述します。
まとめ
今回は、VBAを使って「数式セルのみ」を賢く保護する方法を解説しました。
- まず全セルのロックを解除し、次に数式セルだけをロックするのがポイント。
.SpecialCells(xlCellTypeFormulas)
を使えば、数式セルを簡単に見つけ出せる。
このマクロを使えば、計算用のテンプレートファイルを他の人に共有する際に、入力してほしいセルは自由に残しつつ、大事な数式はしっかりと守ることができます。ぜひ、業務で活用してみてください。