MENU

【入力制限】条件ごとにセルの編集可否を切り替える方法

はじめに: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の「セルのロック」と「シート保護」の仕組みを理解することで、実務で役立つ入力チェックが行えます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次