【VBA】数式のセルだけを保護する方法(入力セルは編集可能に)

目次

はじめに

「計算式が入力されたセルだけを保護して、他の人が誤って数式を壊すのを防ぎたい」「でも、数値を入力するセルは自由に編集できるようにしたい」

複数人で共有するExcelファイルでは、このような場面がよくありますよね。手作業で一つずつセルのロックを設定するのは非常に面倒ですが、VBAを使えばこの処理を瞬時に自動化できます。

この記事では、シート内の数式が入ったセルだけをロックし、それ以外のセルは編集可能な状態でシートを保護する、実用的なVBAマクロをご紹介します。


セルの保護の仕組み

Excelのシート保護は、以下の2つの設定が組み合わさって機能します。

  1. セルの「ロック」属性: 全てのセルには、書式設定に「ロック」というチェックボックスがあります(デフォルトはオン)。
  2. 「シートの保護」機能: 「シートの保護」を実行すると、上記で「ロック」がオンになっているセルが編集不可になります。

つまり、「数式セルだけを保護」するには、以下の手順を踏めばよいことになります。

  1. まず、シートの全てのセルの「ロック」を一旦解除する。
  2. 次に、数式が入力されているセルだけを探し出し、それらのセルの「ロック」を再度オンにする。
  3. 最後に、「シートの保護」を実行する。

数式セルのみを保護する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) を使えば、数式セルを簡単に見つけ出せる。

このマクロを使えば、計算用のテンプレートファイルを他の人に共有する際に、入力してほしいセルは自由に残しつつ、大事な数式はしっかりと守ることができます。ぜひ、業務で活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次