【VBA】特定のセルを編集不可にする方法|Worksheet_Changeでエラーメッセージ表示&元に戻す処理

目次

経緯

Excelでは、セルを編集できないようにするには「セルのロック → シート保護」といった操作が必要です。
しかし、この手順は毎回設定が面倒で、VBAで同じような機能を実装できないかと思い、今回調べてみました。

結果として、Worksheet_Changeイベントを使えば、特定のセルへの入力を即時にキャンセルできる方法が見つかりましたので、紹介いたします。


実現したいこと

  • セル J5~J7 および M5 に対して編集を禁止したい
  • それらのセルに値が入力された瞬間に、入力をキャンセルし、エラーメッセージを表示したい

実装コード(Worksheet_Change使用)

以下のVBAコードを、対象のワークシートのコードウィンドウ(例:Sheet1)に貼り付けてください。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("M5,J5:J7")) Is Nothing Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
        MsgBox "このセルの編集は許可されていません。", vbExclamation
    End If
End Sub

このコードの動作内容

  • Intersect(Target, Me.Range("M5,J5:J7")) により、編集対象セルが禁止範囲に含まれているかを判定
  • 該当する場合は Application.Undo を使って編集を取り消し
  • その後、エラーメッセージをポップアップ表示

注意点

  • Application.EnableEvents = False を使用しないと、無限ループに陥る可能性があります(Undoにより再度Changeイベントが発生するため)
  • セルの結合やシート保護との併用には注意が必要です
  • 複数セルを一括で選択して削除・貼り付けなどを行った場合、意図した挙動にならないことがあります

応用例

  • 入力済みセルの再編集防止(履歴保護)
  • 社内テンプレートなどで、特定項目のみ編集可能にしたい場合
  • 入力制限付きチェックリストや申請書の作成

まとめ

Worksheet_Change イベントと Application.Undo を組み合わせることで、特定のセルに対して即時の編集キャンセルが可能となります。
この方法なら、シート保護なしでも安全にセルを保護でき、柔軟な管理が可能です。

ぜひ業務の効率化やテンプレート管理に活用してみてください。
最後までお読みいただきありがとうございました。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次