【VBA】数式が設定されているセルのみを保護する

VBAから
 ・数式が設定されているセルのみを
 ・保護
できます!

保護することで
 ・誤操作による数式の破壊を防止
できます!

PR

VBAコード

ここでは例として、
 ・シート「sample」の
 ・数式が設定されているセルのみを保護
します。

Option Explicit

Sub sample()
    
    Dim ws As Worksheet
    
    '対象シートを取得
    Set ws = Worksheets("sample")
    
    '指定したシートの保護を解除
    ws.Unprotect
    '指定したシート全体のセルの保護を解除
    ws.Cells.Locked = False
    
    '指定したシートの数式が設定されているセルを保護
    On Error Resume Next
    ws.Cells.SpecialCells(xlCellTypeFormulas).Locked = True
    On Error GoTo 0
    
    '指定したシートを保護
    ws.Protect
    
End Sub

数式が設定されているセルのみを保護する前に
 ・シートの保護を解除
 ・シート全体のセルの保護を解除
します(11~13行目)。

「数式が設定されているセル」のみを保護します(16~18行目)。
※「SpecialCells」メソッドの引数に「xlCellTypeFormulas」を指定することで、「数式のみ」を対象にできます。
※「数式が設定されているセル」が存在しないとエラーが発生するため、エラーを握りつぶしています。

セルを保護した上でシートを保護することで、セルの保護が有効になります(21行目)。

PR

実行結果

数式が設定されているセルの書き換えを試みると、

数式が設定されているセル
数式が設定されているセル

書き換え不可であることを確認できます。

書き換え不可の旨のメッセージ
書き換え不可の旨のメッセージ
PR

参考①

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Worksheetオブジェクト」の「Unprotect」メソッド


●「Rangeオブジェクト」の「Locked」プロパティ


●「Rangeオブジェクト」の「SpecialCells」メソッド


●「Worksheetオブジェクト」の「Protect」メソッド

PR

参考②

シートの保護/保護を解除する方法については、以下の記事をご確認ください。