はじめに:Excelで「ここは触らせたくない」そんなとき

「このセルは計算式が入ってるから触られたくない!でも、他のところは入力できるようにしたい…そんなの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の「セルのロック」と「シート保護」の仕組みを理解することで、実務で役立つ入力チェックが行えます。
コメント