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のイベントプロシージャーは、ブックに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Workbookのイベントは多数用意されています。
第125回.Worksheetのイベントプロシージャー
Worksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Worksheetのイベントプロシージャーの一覧紹介と主要なイベントについて解説します。

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

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

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



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

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


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

import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)
関数の定義(def文)と引数|Python入門(9月18日)
組み込み関数一覧|Python入門(9月17日)
辞書(dict型)|Python入門(9月16日)
入力規則への貼り付けを禁止する|VBA技術解説(9月16日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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