はじめに:Excelで「ここは触らせたくない」そんなとき
A子さん「このセルは計算式が入ってるから触られたくない!でも、他のところは入力できるようにしたい…そんなのVBAでできるの?」



「できます。条件によって“編集できるかどうか”を自動で切り替える、そんな柔軟な設定がVBAでは可能です。」
本記事では、条件に応じて編集可能/不可を自動で切り替える方法をVBAを用いて解説します。
目次
セルのロックとシート保護の基本
- Excelでは「ロックされたセル」はシート保護を有効にすることで編集不可になります。
- 逆に、ロックされていてもシート保護をしていなければ編集は可能です。
つまり、ロック設定とシート保護はセットで初めて意味を持ちます。
条件によってセルのロック状態を切り替える基本コード
以下のコードは、セルA1に「NG」と入力されている場合にB列のセルをロック、そうでない場合はロックを解除するサンプルです。
Sub セルの編集可否を条件で切替()
Dim rng As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' シート保護解除
ws.Unprotect Password:="1234"
' 対象セル範囲のロック状態を初期化(すべて編集可能に)
Set rng = ws.Range("B1:B10")
rng.Locked = False
' 条件によるロック設定
If ws.Range("A1").Value = "NG" Then
rng.Locked = True
End If
' シート保護
ws.Protect Password:="1234", UserInterfaceOnly:=True
End Sub
ポイント解説
ws.Unprotect:ロック設定を変更する前に保護を解除
rng.Locked = False:初期状態としてロックをすべて解除
条件で rng.Locked = True:再度ロック
UserInterfaceOnly:=True:ユーザーにはロックされているが、マクロからは編集できるように
応用例:行単位で入力可否を切り替える
Sub 行ごとの入力制限()
Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Unprotect Password:="1234"
' 1行目〜10行目をチェック
For i = 1 To 10
If ws.Cells(i, 1).Value = "ロック" Then
ws.Rows(i).Locked = True
Else
ws.Rows(i).Locked = False
End If
Next i
ws.Protect Password:="1234", UserInterfaceOnly:=True
End Sub
このように、データの内容に応じて制御することで、安全性と利便性を両立できます。
注意点:保護パスワードとマクロの管理
パスワードはソースコード内に書かれるため、管理が必要
保護の切り替え忘れを防ぐために、一連の処理を1マクロで完結させるのがベスト
まとめ
VBAでは、入力制限を柔軟に制御することが可能です。
Excelの「セルのロック」と「シート保護」の仕組みを理解することで、実務で役立つ入力チェックが行えます。

コメント