Excel VBA ワークシートの保護

スポンサーリンク

ワークシートを保護する方法

ワークシートに作成されているデータなどが誤って消去されたり、変更されたりしないようにするには、ワークシートを保護する必要があります。

Excelにはワークシート内のセルが変更されないようにするためのシートの保護機能があります。他にも、シートを非表示にして隠すことやスクロールできる範囲を制限して他の部分の操作をできないように設定することができます。これらの設定方法について説明をします。

ワークシートを保護するためのプロパティ・メソッド一覧

メソッド・プロパティ内容
Protect【プロテクト】メソッドワークシートを保護します。
Unprotect【アンプロテクト】メソッドワークシートの保護を解除します。
Visible【ビジブル】プロパティワークシートの表示と非表示を切り替えます
ScrollArea【スクロールエリア】プロパティスクロール可能なセル範囲を設定します。

Protect【プロテクト】メソッド

ワークシートを編集ができないように保護するには、Worksheet【ワークシート】オブジェクトのProtect【プロテクト】メソッドを使用します。

Protect【プロテクト】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.Protect[(Password, DrawingObjects, Contents,Scenarios, UserInterfaceOnly, AllowFormattingCells,AllowFormattingColumns, AllowFormattingRows,AllowInsertingColumns,AllowInsertingRows,
AllowInsertingHyperlinks, AllowDeletingColoumns,AllowDeletingRows,
AllowSorting, AllowFiltering,AllowUsingPivotTables)]

  • オブジェクト(必須)
    保護をするシートを表すWorksheet【ワークシート】オブジェクトを指定します。
  • Password【パスワード】(省略可)
    パスワードを文字列で指定します。パスワードは255文字以内で設定し、大文字小文字は区別されます。省略した場合は、パスワードなしで保護を解除でき、設定した場合は保護を解除するためにパスワードが必要になります。
  • DrawingObjects【ドローイングオブジェクツ】(省略可)
    Falseに設定した場合は、描画オブジェクトを保護しません。省略された場合はTrueが設定され、描画オブジェクトを保護します。
  • Contents【コンテンツ】(省略可)
    Falseに設定した場合はワークシートではロックされているセルの保護を解除し、グラフシートではグラフ全体の保護を解除します。省略された場合はTrueが設定され、保護されます。
  • Scenarios【シナリオズ】(省略可)
    Falseに設定した場合は、シナリオを保護しません。省略された場合はTrueが設定され、シナリオは保護されます。
  • UserInterfaceOnly【ユーザーインターフェイスオンリー】(省略可)
    Trueに設定した場合は、画面上からの変更は保護されますが、マクロからの変更は保護されません。省略された場合はFalseが設定され、画面、マクロ両方、保護されます。
  • AllowFormattingCells【アローフォーマッティングセルズ】(省略)
    Trueに設定した場合は、セルの書式が変更できます。省略した場合は、Falseが設定され、セルの書式の変更はできません。
  • AllowFormattingColumns【アローフォーマッテイングカラムス】(省略可)
    Trueに設定した場合は、列の書式が変更できます。省略した場合は、Falseが設定され、列の書式の変更はできません。
  • AllowFormattingRows【アローフォーマッテイングロウズ】(省略可)
    Trueに設定した場合は、行の書式が変更できます。省略した場合は、Falseが設定され、行の書式の変更はできません。
  • AllowInsertingColumns【アローインサーティングカラムス】(省略可)
    Trueに設定した場合は、列の挿入ができます。省略した場合は、Falseが設定され、列の挿入はできません。
  • AllowInsertingRows【アローインサーティングロウズ】(省略可)
    Trueに設定した場合は、行の挿入ができます。省略した場合は、Falseが設定され、行の挿入はできません。
  • AllowInsertingHyperlinks【アローインサーティングハイパーリンクス】(省略可)
    Trueに設定した場合は、ハイパーリンクの挿入ができます。省略した場合は、Falseが設定され、ハイパーリンクの挿入はできません。
  • AllowDeletingColoumns【アローデリーティングカラムス】(省略可)
    Trueに設定した場合は、列の削除ができます。省略した場合は、Falseが設定され、列の削除はできません。
  • AllowDeletingRows【アローデリーティングロウズ】(省略可)
    Trueに設定した場合は、行の削除ができます。省略した場合は、Falseが設定され、行の削除はできません。
  • AllowSorting【アローソーティング】(省略可)
    Trueに設定した場合は、並べ替えを実行できます。省略した場合は、Falseが設定され、並べ替えを実行できません。
  • AllowFiltering【アローフィルタリング】(省略可)
    Trueに設定した場合は、フィルターを設定できます。フィルター条件の変更はできますが、オートフィルターの有効/無効は切り替えはできません。省略した場合は、Falseが設定され、フィルター設定はできません。
  • AllowUsingPivotTables【アローユズイングピボットテーブルズ】(省略可)
    Trueに設定した場合は、ピボットテーブルを使用できます。省略した場合は、Falseが設定され、ピボットテーブルは使用できません。

パスワードを設定して保護し、セルの選択もできないようにするコート例

Sub 保護()
With ActiveSheet
.Protect Password:="1234"
.EnableSelection = xlNoSelection
End With
End Sub

セルの選択をできなくする方法

ワークシートの保護をした場合、編集できないセルであってもセルの選択はできます。ワークシートの保護時に、Worksheet【ワークシート】オブジェクトのEnableSelection【イネーブルセレクション】プロパティを以下の定数で指定します。

定数内容
xlUnlockedCells
【アンロックドセルズ】
ロックを解除しているセル以外のセルを
選択できなくすることができます。
xlNoselection
【ノーセレクション】
すべてのセルが選択できなくなります。
xlNoRestrictions
【ノーリストリクションズ】
すべてのセルが選択可能になります。

例えば、すべてのセルを選択できなくするにはワークシートを保護するコードの後に「Activesheet.EnableSelection = xlNoselection」と記述します。

シートの保護時に入力できるセルを設定する方法

シートの保護前にセルのロックを解除しておくとワークシートを保護しても、そのセルへの入力や編集は可能になります。Range【レンジ】オブジェクトのLocked【ロックツ】プロパティをFalseに設定します。例として、A1セル~A5セルの保護を解除する場合は「Range(“A1:A5”).Locked = False」と記述します。ワークシートが保護されてる状態ではエラーになるので、ワークシートの保護をする前に設定します。

ワークシートが保護されているか確認する方法

Worksheet【ワークシート】オブジェクトのProtectContents【プロテクトコンテンツ】プロパティを使用します。戻り値が、Trueの場合は保護されており、Falseの場合は保護されていません。If【イフ】ステートメント(条件分岐)を利用して以下のようにワークシートの保護状態を確認できます。

Sub 保護確認()
 If ActiveSheet.ProtectContents Then
  MsgBox "シートは保護されています。"
 Else
  MsgBox "シートは保護されていません。"
 End If
End Sub 

Unprotect【アンプロテクト】メソッド

指定したワークシートの保護を解除するには、Worksheet【ワークシート】オブジェクトのUnprotect【アンプロテクト】メソッドを使用します。

Unprotect【アンプロテクト】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.Unprotect[(Password)]

  • オブジェクト(必須)
    保護を解除するシートを表すWorksheet【ワークシート】オブジェクトを指定します。
  • Password【パスワード】(省略可)
    ワークシートを保護するときにパスワードを指定した場合は、そのパスワードを指定します。保護時にパスワードを設定しなかった場合やパスワード入力用のダイアログボックスを表示させる場合は省略します。ダイヤログボックスにパスワードを入力してもらう場合、パスワードが間違っているとエラーになるのでエラー処理のコードを記述します。

パスワード付の保護を解除するコード例

Sub 保護解除()
 On Error GoTo エラー処理
  ActiveSheet.Unprotect
 Exit Sub
 エラー処理:
  MsgBox "パスワードが違います。"
End Sub

Visible【ビジブル】プロパティ

ワークシートの表示と非表示を切り替えるには、Worksheet【ワークシート】オブジェクトのVisible【ビジブル】プロパティを使用します。値の取得と設定ができます。

Visible【ビジブル】プロパティの書式と設定値の説明

【取得】
オブジェクト.Visible
【設定】
オブジェクト.Visible = 設定値

  • オブジェクト(必須)
    表示・非表示を取得または、設定するシートを表すWorksheet【ワークシート】オブジェクトを指定します。
  • 設定値(必須)
    ブール型で指定するか、XlSheetVisibility列挙型の定数で指定します。
    ブール型で指定する場合は、Trueの場合はワークシートを表示。Falseの場合はワークシートを非表示になります。
    XlSheetVisibility列挙型で指定する場合は以下の定数で指定します。
定数内容
xlSheetHidden【シートヒドゥン】シートを非表示にするが手動で再表示できる
xlsheetVeryHidden【ベリーヒドゥン】シートを非表示にし手動で再表示できない
xlsheetVisible【シートビジブル】シートを表示する

※設定値をFalseまたはxlSheetHidden【シートヒドゥン】にするとワークシートは非表示になりますが、Excelのメニューから再表示できます。xlsheetVeryHidden【ベリーヒドゥン】を設定すると非表示にするとともにExcelのメニューから再表示ができなくなります。再表示する場合はVBAでVisibleプロパティの設定値をTrueもしくは、xlsheetVisible【シートビジブル】に設定します。


ScrollArea【スクロールエリア】プロパティ

スクロールが可能なセル範囲を設定するには、Worksheet【ワークシート】オブジェクトのScrollArea【スクロールエリア】プロパティを使用します。このプロパティでセル範囲を指定すると領域以外への画面のスクロールができなくなり、その領域以外のセルを選択することができなくなります。

ScrollArea【スクロールエリア】プロパティの書式と設定値の説明

【取得】
オブジェクト.ScrollArea
【設定】
オブジェクト.ScrollArea = 設定値

  • オブジェクト(必須)
    スクロールするシートを表すWorksheet【ワークシート】オブジェクトを指定します。
  • 設定値(必須)
    スクロールを可能とする範囲をA1形式の文字列で指定します。“A1:C5″のように指定します。空文字””を指定した場合は、設定が解除されすべてのセルの選択とスクロールが可能になります。

A1セルからD5セルの表範囲以外にスクロールを制限するコード例

Sub 範囲制限()
 ActiveSheet.ScrollArea = "A1:D5"
End Sub

※指定したA1~D5セルの範囲以外のセルの選択もできなくなります。

スクロール領域の制限を解除するコード例

Sub 制限解除()
 ActiveSheet.ScrollArea = ""
End Sub

※制限を解除するには設定値を空文字にします。

セルを表すRange【レンジ】オブジェクトでスクロール可能領域を設定する方法

Address【アドレス】プロパティを使用して設定します。例えばA1セルから始まる表範囲を設定する場合は
「Activesheet.ScrollArea = Range(“A1”).CurrentRegion.Address」と記述します。


以上で、ワークシートの保護についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告