VBA技術解説
シート保護でユーザー操作を制限する

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
最終更新日:2020-06-28

シート保護でユーザー操作を制限する


ユーザーがあちこち触って計算式を壊されないようしたり、
セルの境界をダブルクリックして最終行に飛んでしまい迷子になったりしないように、
シートを保護して、ユーザー操作を制限します。


操作できるセルを徹底的に限定します。
無用なセルはクリックもできない、スクロールすることもできなくしてしまいます。

以下の手順になります。
セルのロック → シートの保護 → ScrollArea の設定
順に説明します。

セルのロックと解除:Locked

セルの初期は、「ロック」されています。
操作可能にするセルのロックだけを解除しておきます。

Dim ws As Worksheet
Set ws = ActiveSheet
With ws
  .Cells.Locked = True
  .Range("A2:B10").Locked = False
End With

全セルを一旦ロックした後に、A2:B10の範囲だけをロック解除しています。

Range("A2:B10").Locked = False

これでロックを外します。
Range("A2:B10").Locked = False
これでロックします。

セルの範囲は適切に設定してください。
操作可能にするセル全てに対して行います。
これは手動での、以下の画面に相当します。

VBA マクロ シート保護


シートの保護:Protect

当該シートを保護します。

シート.Protect

シートには、ワークシートのオブジェクトを指定してください。
※Worksheets("Sheet1")、ActiveSheet、Worksheetオブジェクト変数等々
※Protectプロパティの詳細は「第68回.シートの保護(Protect)

初めて保護設定するシートの場合は、
以下の「シートの保護」のダイアログで初期選択されているオプションが選択された状態となります。

VBA マクロ シート保護

この状態ですと、保護してあるセルも選択(クリック)出来てしまいます。

クリックも許可しない場合は、
「シートの保護」のダイアログの一番上の
「ロックされたセル範囲の選択」のチェックを外します。
これだけを別途VBAで設定するには、
シート.EnableSelection = xlUnlockedCells
このように記述します。
このEnableSelectionプロパティは、シートのプロパティの


VBA マクロ シート保護

下から5番目のプロパティを設定しているわけです。

スクロール範囲:ScrollArea

上記までを設定すれば、
セルをダブルクリックする時に境界をクリックしてしまって、最終行に飛んでしまったりは無くなります。
それでも間違ってスクロールして画面に何も表示されていない、といった状態にはなってしまう事はあります。
そこで、不必要な範囲にはスクロールもできなくしてしまうことができます。

シート.ScrollArea = "セル範囲"

シートには、ワークシートのオブジェクトを指定してください。
※Worksheets("Sheet1")、ActiveSheet、Worksheetオブジェクト変数等々
セル範囲には、"A1:B10"のように指定します。

これは、シートのプロパティの

VBA マクロ シート保護

下から3番目のプロパティを設定しているものになります。
ただし、このプロパティは保存されません。
ブックを開き直した場合は、設定が消えてしまいます。
そこで、ブックのOpenイベントで毎回設定するようにします。

Private Sub Workbook_Open()
  Dim ws As Worksheet
  Set ws = Worksheets("Sheet1")
  ws.ScrollArea = "A1:B10"
End Sub

イベントについては以下を参照してください。

第124回.Workbookのイベントプロシージャー
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange:Workbookのイベント
第125回.Worksheetのイベントプロシージャー
・Worksheetのイベント ・イベントプロシージャー追加のVBE操作 ・Activate:Worksheetのイベント ・BeforeDoubleClick:Worksheetのイベント ・BeforeRightClick:Worksheetのイベント ・Change:Worksheetのイベント ・SelectionChange:Worksheetのイベント ・全てのシートまたは複数のシートに対するイベント

シート保護でユーザー操作を制限する

ここまでやればね間違った操作でシートを壊してしまったり、
「画面に何もなくなった」と言って途方に暮れるExcel初心者もいなくなると思います。

とはいえ、本質論を言うなら、
エクセル操作するなら、最低限の操作くらいは覚えましょう。
つまり逆に言えば、マクロを書く立場の人は、Excel初心者の人に、やさして教えてあげてください。
最初は誰だって知らないのですから。



同じテーマ「マクロVBA技術解説」の記事

空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
空白セルを正しく判定する方法2
Rangeオブジェクト.Valueの省略について
シート保護でユーザー操作を制限する
シートに数式を設定する時のセル参照の指定方法
標準モジュールとシートモジュールの違い
オートフィルタ(AutoFilter)の使い方まとめ
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
クリップボードを使わないセルのCopy
Rangeの使い方:最終行まで選択を例に
フルパスをディレクトリ、ファイル名、拡張子に分ける


新着記事NEW ・・・新着記事一覧を見る

TOROW関数(配列を横1行の配列にして返す)|エクセル入門(2022-10-31)
TOCOL関数(配列を縦1列の配列にして返す)|エクセル入門(2022-10-31)
CHOOSECOLS関数(配列から複数の指定された列を返す)|エクセル入門(2022-10-29)
CHOOSEROWS関数(配列から複数の指定された行を返す)|エクセル入門(2022-10-29)
WorksheetFunctionの効率的な使い方とスピル新関数の利用|VBA入門(2022-10-27)
VSTACK関数(配列を縦方向に順に追加・結合)|エクセル入門(2022-10-25)
HSTACK関数(配列を横方向に順に追加・結合)|エクセル入門(2022-10-25)
LAMBDA以降の新関数の問題と解説(配列操作関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題集|エクセル入門(2022-10-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.エクセルVBAでのシート指定方法|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ