こんにちは、Ryoです。
セルへの入力を制限したいいような場合にシートの全体の保護を扱うことがありますが、その中で指定セルのみ編集可としたり、逆に指定セルのみを編集不可とするような形もLockedプロパティ、Protect/Unprotectメソッドを利用して対応できますので、今回はその内容について書いていきます。
1.サンプル概要
Sheet1のセルB3(黄色部分)に対して処理を行います。指定セルのみ編集可とするボタン、セルB3のみを編集不可とするボタン、初期化するボタンにそれぞれサンプルコードを割り当ててあります。

先ず「セルB3のみ編集可」のボタンを押して実行するとセルB3のみ入力や削除など受け付けますが、他のセルのB5に入力しようとすると編集不可のアラートが表示されます。

次に「セルB3のみ編集不可」のボタンを押して実行するとセルB3のみ編集が不可となり、他セルは入力を受け付けるようになります。下の画像はセルB3の文字を削除しようとしてアラートが表示されているものです。

このようにセルB3以外は入力することができます。

「全て解除」ボタンはシートの保護解除、及びセルのロック状態を初期化するものです。このボタンを押すことで通常の状態に戻ります。

これらの動作は以下動画の通りですので、ご参考までに。
以上がサンプル概要になります。
2.サンプルコード
◆特定セルのみ編集可
Sub Sample1()
'**特定のセルのみ編集可能とする**
'セルB3のロックを解除
Range("B3").Locked = False
'Sheet1に対する処理
With Worksheets("Sheet1")
'ワークシートを指定する場合はSelectで指定し、
'処理を行う必要がある
.Select
'Sheet1の保護
.Protect
End With
'※セルB3のみロック解除されているので、シート保護の
' 対象から外れ編集が可能となる
End Sub
指定したセルやセル範囲のみを編集可とするには、その指定範囲を除いてワークシートを保護することで対応できます。
通常セルはデフォルトで「ロック」された状態になっています。これは「セルの書式設定」⇒「保護」のタブを確認すればロックにチェックされています。

このセルに対するロックのON/OFFはLockedプロパティを利用することで対応できます。ロックするには「True」、ロック解除は「False」で設定します。
オブジェクト.Locked = True / False
このロックはシートの保護を実行した際に保護するかしないかを決めるものなので、ロックされた状態(True)で保護⇒編集不可となり、ロック解除状態(False)で保護⇒編集可となります。
その為、適切にセルのロックや解除を行ったうえで保護しないとロックしたのに効かない(書き込みできる)状態になったり、解除したのに編集できない等が発生するので注意が必要です。
サンプルコードでは先ずRange(“B3”).Locked = Falseを実行してセルB3のロックを解除し、そのSheet1を選択しProtectメソッドで保護を実行していますのでロック解除されたセルB3のみが編集可となり、他は全てロックされている状態で保護されたので編集不可となります。
◆特定セルのみ編集不可
Sub Sample2()
'**特定のセルのみ編集不可とする**
'Sheet1に対する処理
With Worksheets("Sheet1")
.Select
'Sheet1の保護を解除
.Unprotect
'Sheet1セル全体のロックを解除
Cells.Locked = False
'セルB3のみロックする
Range("B3").Locked = True
'Sheet1の保護
.Protect
End With
'※セル全体のロックを解除し、その後対象セル(B3)のみ
' ロックしてシート保護することで指定セルのみが編集不可となる
End Sub
この場合は先ずシート保護の解除をUnprotectメソッドで実行します。その後Cells.Locked = FalseでSheet1のセル全体のロックを解除してから指定セル(B3)のみを選択してロックし保護を行うことでセルB3のみが編集不可となります。
繰り返しになりますが、シート保護の際にロック解除されていれば編集は可能であり、ロックされていれば保護対象となって編集不可とすることができます。
ちなみにワークシートを保護した状態(Protectメソッド実行後)ではロック解除などはできませんので処理手順にはお気を付けください。
◆シート保護解除/セル全体のロック(初期化)
Sub Sample3()
'**シート保護解除、セル全体のロック**
'Sheet1に対する処理
With Worksheets("Sheet1")
.Select
'Sheet1の保護解除
.Unprotect
'セル全体のロック
Cells.Locked = True
End With
'※シート保護解除とセル全体のロックによる初期化処理
End Sub
指定シートに対してUnprotectメソッドを実行してシート保護を解除し、セル全体に対してLocked =Trueとすることで初期状態に戻す処理を行っています。
3.まとめ
セルの一部に入力を許可したり、入力が完了したセルの編集を禁止したいようなケースなどでは扱える機会もありそうな気がします。
セルのロック有無とシート保護との関係性を理解できていれば扱いやすいですが、処理の順番を誤るとエラーなりますのでその点だけご注意ください。
以上、特定のセルのみ入力可/入力不可を設定する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

