VBA

エクセルで一部のセルを変更できないようにする方法

記事内に商品プロモーションを含む場合があります

このページでわかること

セルを一部分のみ変更できないようにすることができます。

覚えること
  1. 変更できるようにしたいセルを選択して右クリック→セルの書式「保護」タブの「ロック」チェックを外す
  2. 校閲タブの「シートの保護」をクリック
  3. 変更できるようにしたいセルの処理
    レンジオブジェクト.Locked=False
  4. シートの保護
    シートオブジェクト.Protect

こんにちはhokkyokunです。
作ったマクロを人や組織に提供した際、
自分が想定していない使い方をされちゃうことあると思います。

そんなときは
特定のセル以外、変更、編集不可にしちゃいましょう。
エクセルのタブからやる方法とVBAでやる方法をご紹介します。

セルの保護(ロック)を解除

こんな感じのシートでテーブル以外は変更不可にしたいとします。

変更できるようにしたい範囲を選択して右クリックを押す。
そして、「セルの書式設定」をクリックします。

セルの書式設定から「保護」タブをクリックし、
ロックのチェックを外す

校閲タブをクリックし、
シートの保護をクリックし、
デフォルトの状態でOKを押す。
パスワードを設定する場合、上部のテキストボックスにパスワードを入力する。

これでOKです。
ダブルクリックしたり、入力をしようとすると、
このような警告文がでます。

VBAでやってみよう

構文リスト

シートの保護
シートオブジェクト.Protect

シートの保護(パスワード)
シートオブジェクト.Protect Password:=パスワード名

シートの保護解除
シートオブジェクト.Unprotect

シートの保護解除(パスワード)
シートオブジェクト.Unprotect Psasword:=パスワード名

変更できるセル範囲の設定
レンジオブジェクト.Locked = False

VBAコード

VBAでやってみましょう。

Sub ロック()
'テーブルのセット
Dim table As ListObject
Set table = ActiveSheet.ListObjects(1)

'変更できるセル範囲の設定
table.range.Locked = False

'シート保護
ActiveSheet.Protect Password:=9999

End Sub

上記の場合、すでに保護状態の場合はエラーが出ます。
そのため、一回保護解除して、
変更できる範囲を設定しなおして、
シート保護をするとエラーが発生せずに処理できます。


Sub ロック()
'テーブルのセット
Dim table As ListObject
Set table = ActiveSheet.ListObjects(1)

'シート保護解除
ActiveSheet.Unprotect Password:=9999

'変更できるセル範囲の設定
table.range.Locked = False

'シート保護
ActiveSheet.Protect Password:=9999

End Sub

まとめ

いかがでしょうか。
VBAで組み込む必要があればVBAを使い、
シートの保護範囲が変わらないのであればあらかじめ設定しておくといいと思います。

ではでは。