こんにちは、わたあめです!今日はExcel VBAマクロにおけるセルのロックについての記事になります。先日、VBAマクロを作成している時にこんな問題にあたりました。
そこで、セルをロックしてもロックがかからない?!という現象。セルをロックしているのにも関わらず、文字が入力できてしまったのです。ロック設定をしているのにも関わらずなぜロックが有効にならなかったのかを深堀して調べてみました。
特定のセルにロックをかける・特定のセルだけにロックをかけないというサンプルマクロも紹介しています。それでは、いってみましょう!
Excelのセルのロックとは?
Excelのセルのロックはセルに対して操作を制限する機能の事です。例えば、ロックをしているセルに対しては文字を入力できないという制限をかけることが出来ます。セルのロックの設定手順は以下です。
マウス操作の場合
マウス操作の場合は、以下の設定手順でセルのロック設定画面を表示させることが出来ます。
- セルを選択
- 右クリック>[セルの書式設定]
- [保護]タブ>[ロック]のチェックを入れる
このロック設定は全てのセルでデフォルトでロックにチェックが入っています。
VBAマクロの場合
VBAマクロの場合は、以下の記述でセルのロック設定が出来ます。
' 指定セルのロック
ActiveSheet.Range("A1").Locked = True
"True"がロック状態、"False"がロックされていない状態となります。ロック設定を行いたい場合は、以下の記述方法でないとエラーが出るので注意です。
' 指定セルのロック
ActiveSheet.Range("A1").MergeArea.Locked = True
MergeAreaという記述が加わっています。
上記設定でセルのロック設定を行っても、実は制限がかかっておらず、文字などが入力できる状態となっています。その理由を次章に述べます。
セルのロックはシート保護されている時のみ有効
セルのロックを行ったのに、なぜロックされていないのか?何も制限がかかっていないのか?それは、セルのロックはシートが保護されている時に有効になるからです。シートの保護がかかった時点でセルにロック設定も生きてくるという訳です。
シートの保護のやり方
セルのロック設定を有効にするために、シート保護してみましょう。設定手順は以下です。
- 保護したいシートのどこかのセルを選択
- [校閲]>[シートの保護]をクリック
- [このシートのすべてのユーザーに許可する操作]で必要な項目にチェックを入れる
- [OK]ボタン
これでシートが保護されます。シートの保護がかかった時点でセルのロック設定が効くようになります。デフォルトではすべてのセルにロックがされているので、シート保護をした時点ではすべてのセルに制限がかかっている状態になります。
ちなみに、シートに保護がかかり、セルにロック設定がなされている場合、セルを編集しようとすると以下のメッセージが出ましたよ。
次章からは、実践編で特定のセルにロックをかける・かけないVBAサンプルマクロを紹介していきます。
特定のセルにロックをかけたい場合のVBAマクロ
特定のセルにロックをかけるマクロサンプルは以下です。セルA1にロックをかけ、編集できないようにするマクロです。処理説明はコメント文に記載しています。
Sub test()
' シート保護解除
ActiveSheet.Unprotect
' 全てのセルのロックを解除
ActiveSheet.Cells.Locked = False
' 指定セルのロック
ActiveSheet.Range("A1").Locked = True
' シート保護
ActiveSheet.Protect
End Sub
処理前にはシートの保護を解除しておきます。そして、デフォルトでロックがかかっているセルのロックを解除します。最後に、ロックをかけたいセルを指定してシート保護するという流れのマクロです。
それは、次の章にサンプルマクロを載せますね!
特定のセルは編集可能、その他のセルはロックするVBAマクロ
特定のセルを編集可能にして、その他のセルはロックするサンプルマクロは以下です。セルA1は編集可能で、その他のセルは編集できないようになるマクロです。
Sub test()
' シート保護解除
ActiveSheet.Unprotect
' 全てのセルをロック
'(※ここの処理は無くても良いかもですが、念のため)
ActiveSheet.Cells.Locked = True
' 指定セルをロック解除
ActiveSheet.Range("A1").MergeArea.Locked = False
' シート保護
ActiveSheet.Protect
End Sub
処理前にはシートの保護を解除しておきます。そして、デフォルトでロックがかかっているかもしれませんが、すべてのセルにロック設定をします。最後に、ロックをかけないセルを指定してシート保護するという流れのマクロです。
さいごに
いかがだったでしょうか?セルのロック・シートの保護の関係について、少しでも理解の足しになれば幸いです。それでは、また!