保護されたシートで特定のセルのみ変更可能にする(Lockedプロパティ)|Excel VBA |
シートが保護されている場合でも、セルのロックが解除されているセルは、ユーザーによる変更が可能になります。
入力されている数式や書式、作成したグラフ等を変更されたくない場合は、シートを保護しておき、ユーザーに編集を許可するセルだけロックを解除しておくことで、ユーザーの操作からシートを守ることができます。
セルのロックは、RangeオブジェクトのLockedプロパティで設定(True)/解除(False)します。シートの保護はProtectメソッドで行い、解除はUnProtectメソッドで行います。
なお、シートが保護されていない場合は、LockedプロパティをTrueに設定しても、セルのロックは有効になりません。
次のサンプルは、使用中のセルのうち、空白セルのみユーザーの入力を許可するように設定します。
Sub Sample()
ActiveSheet.Unprotect Password:="abcd" '----シートの保護を解除
Cells.Locked = True '----(1)全セルをロック
On Error Resume Next
ActiveSheet.UsedRange.SpecialCells( _
Type:=xlCellTypeBlanks).Locked = False '----(2)空白セルのロックを解除
On Error GoTo 0
ActiveSheet.Protect Password:="abcd" '----シートの保護
End Sub
(1)のステートメントで、いったん全セルのLockedプロパティをTrueにした後、(2)のステートメントで空白セルのLockedプロパティをFalseにし、最後にシート全体の保護をかけています。
最初にシートの保護を解除しているのは、シートに保護がかかっている状態ではLockedプロパティの設定ができないためです。
●補足●
保護されたシートでは、LockedプロパティにFalseが設定されたセル間を[Tab]キーで移動できます。