Excel VBA 数式が入力されているセルだけ保護をかける

数式が入力されているセルだけ保護をかける方法

複数人で扱うシートの場合、数式が入力されているセルを誤って編集してしまう場合があります。それを防ぐために、数式や関数が入力されているセルのみ編集ができないように保護をかけておくと安心です。

手順としては、シートの保護をWorksheet【ワークシート】オブジェクトのUnprotect【アンプロテクト】メソッドを使用して解除し、セルの編集をロックするRange【レンジ】オブジェクトLocked【ロックトゥ】プロパティを使用してすべてのセルのロックを解除します。

その後、特定のセルを参照するRange【レンジ】オブジェクトのSpecialCells【スペシャルセルズ】メソッドで数式が入力されているセルを参照してLocked【ロックトウ】プロパティでセルの編集をロックし、Worksheet【ワークシート】オブジェクトのprotect【プロテクト】メソッドを使用してワークシートに保護をかけます。

※Locked【ロックトゥ】プロパティでセルの編集にロックをかけた後に、Worksheet【ワークシート】オブジェクトのprotect【プロテクト】メソッドでワークシートに保護をかけないとセルのロックは有効になりません。

Locked【ロックトゥ】プロパティ

セルの編集にロックをかけたりロックの解除をするにはRange【レンジ】オブジェクトのLocked【ロックトゥ】プロパティを使用します。

Locked【ロックトゥ】プロパティの書式と設定値の説明

オブジェクト.Locked = 設定値

  • オブジェクト(必須)
    編集のロックをかけたり編集のロックを解除するセルまたはセル範囲をRangeオブジェクトで指定します。
  • 設定値(必須)
    編集のロックと解除をブール型の値で指定します。

    設定値内容
    Trueセルの編集をロックします。
    Falseセルの編集のロックを解除します。

数式が入力されているセルだけ保護するコードと解説

Sub 数式保護()
 ActiveSheet.Unprotect
 Cells.Locked = False
 ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True
 ActiveSheet.Protect
End Sub
2行目【ActiveSheet.Unprotect】
Worksheet【ワークシート】オブジェクトのUnprotectメソッドを使用してシートの保護を解除します。シートが保護されていない可能性が高いですが保護されている場合は、次のLocked【ロックトゥ】プロパティが使用できないので念の為シート保護の解除のメソッドを実行します。


3行目【Cells.Locked = False】
Cells【セルズ】プロパティで、すべてのセルを参照してLooked【ロックトゥ】プロパティにFalseを設定し、すべてのせるのロックを解除します。こちらも、セルがロックされていない可能性は高いですが念の為実行します。


4行目【ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True】Worksheet【ワークシート】オブジェクトのUsedRange【ユーズドレンジ】プロパティを使用して使用されているセル範囲を参照して、特定のセルを参照するRange【レンジ】オブジェクトのSpcialCells【スペシャルセルズ】メソッドの第一引数にxlCellTypeFormulas【エックスエルタイプフォーミュラズ】で数式が含まれているセルを表す定数を設定して数式が含まれるセルを参照し、Looked【ロックトゥ】プロパティにTrueを設定してセルにロックをかけます。


5行目【ActiveSheet.Protect】
Worksheet【ワークシート】オブジェクトのProtect【プロテクト】メソッドでワークシートに保護をかけます。
※セルのロックをかけた場合はシートの保護もかけないとセルのロックは有効になりません。

以上で、数式が入力されているセルだけ保護をかける方法の解説を終了します。
ありがとうございました。

スポンサーリンク