こんにちは、Ryoです。
Excelで不特定多数の人間がデータ入力をする際に選択できる範囲を限定したいことがあると思います。VBAではスクロール可能な範囲を限定するScrollAreaプロパティを使うことで、指定した領域以外のセル選択やスクロールを不可と出来ますので、今回はその内容について書いていきたいと思います。
1.サンプル概要
サンプルとして、以下画像に示す表があるとします。
通常であればセルもスクロールも自由自在ですが、サンプルではセル範囲をC3:N6に限定しますので、表内以外を選択することは出来なくなります。
2.サンプルコード
コードの記述自体は数行なので、簡単です。用途例に応じてどのように記述するかについて書いていきます。
◆ブックを開いた時点のアクティブシート対象
これは例えばブック内にSheetが一つのみ、または最初にアクティブとなっているシートに対して処理を実行したい場合を例としています。
記述は「標準モジュール」に行います。
Sub Auto_Open() ActiveSheet.ScrollArea = "C3:N6" End Sub
この通り、Total3行です(笑)
使用するScrollAreaプロパティの構文は以下になります。
オブジェクト.ScrollArea = 設定値
このScrollAreaプロパティを使用することで、例の通りセル選択やスクロール範囲を限定してくれます。設定値はA1形式の文字列で指定する形になります。
また、サンプルコードで使用しているSub Auto_Openはブックを開いた際に自動実行されるものです。他にも同様の処理を行えるWorkbook_Openという「ThisWorkbook」に記述するやり方もあります。
その場合の記述は以下の通りです。
Private Sub Workbook_Open() ActiveSheet.ScrollArea = "C3:N6" End Sub
実行結果としては同様で、ブックを開いた時のアクティブシートセル範囲C3:N6以外は選択出来なくなります。
◆シートがアクティブになった時の処理
先程のサンプルは「ブックを開いた時」でしたが、こちらは対象とするシートを「アクティブ」にした際に実行されます。
記述する場所は対象とするシートのシートモジュールになります。例えばSheet2が対象ならここですね。
ここに以下サンプルコードを記述すればOKです。
Private Sub Worksheet_Activate() ActiveSheet.ScrollArea = "C3:N6" End Sub
◆設定した制限を解除する場合
場合によっては設定したスクロール制限を解除したいこともあると思います。その場合は以下を標準モジュールに記述して実行すればOKです。
Sub Sample2() ActiveSheet.ScrollArea = "" End Sub
この通り、設定値を””とすれば解除されます。
3.まとめ
ScrollAreaプロパティを活用することで、入力セルの選択間違いや不要な場所への移動制限なども図れるので、有効な場面も多いのではないでしょうか。
記述自体も簡単なので使いやすいですから、機会があればぜひご検討くださいませ!
以上、【VBA】セル範囲やスクロールを制限する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo