EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)【ワークシートの操作】②
EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)【ワークシートの操作】②
今回は、前回の続きとなります。EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)の使用方法を説明したいと思います。前回、説明出来なかった下記の項目を中心に説明いたします。
①指定した入力用のセルを除外(ロックを外す)してシートを保護する。
②ユーザーにワークシートの保護解除パスワードを入力させます。
③ブックのワークシートが保護されているか、されていないかを調べる。
④シートの保護時に行の挿入・行の削除を可能にする。
⑤計算式が入力されているセルをシート保護する
それでは順番に、ワークシートの保護・ワークシートの保護解除の利用方法をサンプルプログラムを交えて説明いたします。
【ワークシートの保護・保護解除の基礎については、こちらを参照してください。】
https://akira55.com/worksheet_protect/
指定した入力用のセルを除外(ロックを外す)してシートを保護する
下記のサンプルプログラムは、ワークシートの保護を行うプログラムですが、普通にワークシートの保護を行ってしまうと、ワークシート全体が保護されてしまい。確かにワークシートの内容は、壊されないけどデータも登録などが行えなくなってしまいます。今回は、ユーザーに入力できる部分のセルに対して保護ロックを外すサンプルプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' '******** AKIRA55.COM ******* https://akira55.com/worksheet_protect2/ ' Sub WorkSheetProtect04() '指定した入力用のセルを除外(ロックを外す)してシートを保護する。 Dim ws01 As Worksheet Set ws01 = Worksheets("請求書") With ws01 '指定したセルの保護ロックのチェックを外します。 .Range("B7:E8").Locked = False '請求先 .Range("I6:J6").Locked = False '請求No .Range("C11:F12").Locked = False '社名 .Range("I17:J18").Locked = False '担当者 .Range("C28:I30").Locked = False '内容内訳 .Range("C37:F40").Locked = False '備考 .Protect Password:="seikyu" 'シートの保護を行う End With MsgBox "請求書シートのパスワードロックしました。" End Sub ' |
(画面クリックして拡大)
指定したワークシートに対して「セルの書式のロック」にチェックを入れる。(チェックを外す)
下記のサンプルプログラムは、指定したワークシートに対して「セルの書式」のロックにチェックを付けて、かつ、シートの保護を解除するサンプルプログラムです。
【こんな時に便利】
どのセルに【セルの書式】のロックにチェックを外したのか分からなくなり、シート全体にロックのチェックを付けたい場合。
【使用例】
・シート全体に対して保護ロックにチェックはするには、「ActiveSheet.Cells.Locked = True」
・シート全体に対して保護ロックにチェックを外すには、「ActiveSheet.Cells.Locked = False」
【プログラムで実行する内容】
①ワークシートの保護を解除します。
②ワークシート内の全セルに対して【セルの書式】のロックにチェックを入れます。
●プログラム実行条件
ワークシート名を「請求書”」
ワークシート「請求書」がシートパスワードロックされている状態 パスワード:「seikyu」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' '******** AKIRA55.COM ******* https://akira55.com/worksheet_protect2/ ' Sub WorkSheetProtect05() '指定したシートに対して「セルの書式のロック」にチェックを入れる。 Dim ws01 As Worksheet Set ws01 = Worksheets("請求書") 'ワークシートをセット With ws01 .Unprotect Password:="seikyu" 'パスワードの設定を解除しました。 .Cells.Locked = True 'シート全体に対して保護ロックにチェックを付けます。 'シート全体に対して保護ロックにチェックを外す場合は、「False」 End With MsgBox "請求書シートのパスワードロック解除しました。" End Sub ' |
●実行前~実行後 ※プログラム実行後、ワークシートの全てのセルの保護ロックにチェックが入りました。
(画面クリックして拡大)
ブック内のワークシートがシート保護されているか、されていないかを調べる
下記のサンプルプログラムは、ブック内のワークシートが保護されているのか、保護されていないのかを全てのワークシートに対して調べます。
ActiveSheet.ProtectContents = True ※ワークシートは保護されています。
ActiveSheet.ProtectContents = False ※ワークシートは保護されていません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' '******** AKIRA55.COM ******* https://akira55.com/worksheet_protect2/ ' Sub WorkSheetProtect06() 'ブック内のワークシートが保護されているか、されていないかを調べる Dim wsCheck As Boolean Dim WS As Worksheet For Each WS In Worksheets '全てのワークシートを繰り返す wsCheck = WS.ProtectContents 'ワークシートを調べる If (wsCheck = True) Then MsgBox "ワークシート[" & WS.Name & "]:保護あり" Else MsgBox "ワークシート[" & WS.Name & "]:保護なし" End If Next WS End Sub ' |
(画面クリックして拡大)
ワークシートを保護しても行の挿入・行の削除を可能にする
下記のサンプルプログラムは、ワークシートを保護しても行の挿入・行の削除を可能にするサンプルプログラムです。
●プログラム実行条件
ワークシート名を「個人別売上」
ワークシート「個人別売上」がシートパスワードロックされている状態 パスワード:「kojin」
●今回は、ワークシートの保護で、行挿入・削除を許可を設定しましたが、他にも列の挿入・削除など機能設定がありますので、下記を参照して下さい。
Protect メソッド 引数一覧 | ||
---|---|---|
引数 | 既定値 | 説明 |
Password | ワークシートのパスワードを設定します。この設定したパスワードは、保護解除する時に必要になります。 | |
DrawingObjects | True | 描画オブジェクト(図形)を保護するには、 True を指定します。Falseで解除 |
Contents | True | グラフ全体が保護されます。Trueで保護します。 |
Scenarios | True | シナリオを保護するには、 True を指定します。 この引数はワークシートの場合のみ有効です。 |
UserInterfaceOnly | False | True を指定すると、画面上からの変更はできません。(保護)VBA(マクロ)からの変更は保護されません。 この引数を省略すると、VBA(マクロ)からも、画面上からも保護されて変更することができなくなります。 |
AllowFormattingCells | False | True を指定すると、保護されたワークシートのセルを書式設定することができます。 |
AllowFormattingColumns | False | True を指定すると、保護されたワークシートの列を書式設定することができます。 |
AllowFormattingRows | False | Trueを指定すると、保護されたワークシートの行を書式設定できます。 |
AllowInsertingColumns | False | True を指定すると、保護されたワークシートに列を挿入することができます。 |
AllowInsertingRows | False | True を指定すると、保護されたワークシートに行を挿入することができます。 |
AllowInsertingHyperlinks | False | Trueを指定すると、保護されたワークシートにハイパーリンクを挿入することが許可されます。 |
AllowDeletingColumns | False | True を指定すると、保護されたワークシートの列を削除することができ、削除される列のセルはすべてロック解除されます。 |
AllowDeletingRows | False | True を指定すると、保護されたワークシートの行を削除することができ、削除される行のセルはすべてロック解除されます。 |
AllowSorting | False | True を指定すると、保護されたワークシートで並べ替えを行うことができます。 並べ替え範囲内のセルは、ロックと保護が解除されている必要があります。 |
AllowFiltering | False | True を指定すると、保護されたワークシートにフィルターを設定することができます。 |
AllowUsingPivotTables | False | Trueを指定すると、保護されたワークシートでピボットテーブルとピボットグラフを使用することができます。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
' '******** AKIRA55.COM ******* https://akira55.com/worksheet_protect2/ ' Sub WorkSheetProtect07() 'ワークシートを保護しても行の挿入・行の削除を可能にする Dim ws01 As Worksheet Set ws01 = Worksheets("個人別売上") 'ワークシート「個人別売上」を設定 ws01.Protect Password:="kojin", AllowInsertingRows:=True, AllowDeletingRows:=True 'ワークシートの保護と同時に、行の挿入・行の削除を許可します。 MsgBox "請求書シートのパスワードロックしました。" End Sub ' |
(画面クリックして拡大)
計算式が入力されているセルをシート保護する
下表の【個人別売上合計表】は、赤枠部分に、計算式がセルに登録されています。ただ見た目だけでは、計算式が登録されているか分かりませんが、HasFormulaプロパティを利用して数式を判断してくれます。
HasFormulaプロパティの利用例
A = Range(“A1”).HasFormulaA = Trueの場合は、数式が含まれる
A = false の場合は、数式が含まれない。●プログラム実行条件
ワークシート名を「個人別売上」
ワークシート「個人別売上」がシートパスワードロックされている状態 パスワード:「kojin」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
' '******** AKIRA55.COM ******* https://akira55.com/worksheet_protect2/ ' Sub WorkSheetProtect08() '計算式が入力されているセルをシート保護する Dim ws01 As Worksheet Dim CKRange As Range Set ws01 = Worksheets("個人別売上") 'ワークシート「個人別売上」を設定 For Each CKRange In ws01.Range("A5").CurrentRegion If CKRange.HasFormula = False Then 'セルが文字列・数値の場合 ws01.Range(CKRange.Address).Locked = False 'セルのロックを解除する(入力出来る様にする) Else ws01.Range(CKRange.Address).Locked = True '文字列・数値以外(計算式)は、セルをロックする End If Next CKRange ws01.Protect Password:="kojin" End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。