EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)
EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)
●オブジェクト.Protect(Password)
※ワークシートを保護します。
記述例:Worksheets(“Sheet1″).Protect:=”PassABC”
ワークシートの保護・指定したワークシートの保護設定
下記のサンプルプログラムは、指定したワークシートに対して、ワークシートの保護を行うサンプルプログラムです。
プログラムは、一行ですが下記の手順と同じ作業を行います。
【この手順と同じ内容が実行されます。】
①シート「機密情報」を選択します。
②シートの保護を選択
③シートの保護のパスワードを入力します。【kimitsu】
④OKボタンで確定させます。
1 2 3 4 5 6 7 8 9 10 11 12 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub Protect01() 'ワークシートの保護 Worksheets("機密情報").Protect Password:="kimitsu" MsgBox "ワークシートを保護しました。" End Sub ' |
●実行前~実行後 ※プログラム実行後、指定したシート「機密情報」のワークシートにパスワード保護を設定しました。
(画面クリックして拡大)
指定したワークシートのみワークシートの保護を行う
【3つのワークシートが有ります】下記の通りに、ワークシートの保護を行います。
1・・シート名【一般情報】・・・保護なし
2・・シート名【機密情報】・・・ワークシートの保護 パスワード【kimitsu】
3・・シート名【個人情報】・・・ワークシートの保護 パスワード【kojin】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub Protect02() '指定したワークシートのみワークシートの保護を行う Dim ws01, ws02, ws03 As Worksheet Set ws01 = Worksheets("一般情報") Set ws02 = Worksheets("機密情報") Set ws03 = Worksheets("個人情報") ws02.Protect Password:="kimitsu" ws03.Protect Password:="kojin" End Sub ' |
(画面クリックして拡大)
全てのワークシートに対してワークシートの保護・同じパスワードで保護設定を行う
下記のサンプルプログラムは、全てのワークシートに対してワークシートの保護・各シートごとにパスワードので保護設定を行う。(ループ設定)
【全てのワークシートに対して、各シートごとにパスワードを設定してシート保護を行う。】
1・・シート名【一般情報】・・・ワークシートの保護 パスワード【ABC】
2・・シート名【機密情報】・・・ワークシートの保護 パスワード【123】
3・・シート名【個人情報】・・・ワークシートの保護 パスワード【あいう】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub Protect03() '全てのワークシートに対してワークシートの保護・各シートごとにパスワードの設定を行う。 Dim ws As Worksheet Dim Pass_set As String For Each ws In Worksheets '全てのワークシート繰り返す Pass_set = InputBox(ws.Name & "シートの保護パスワードを入力して下さい") ws.Protect Password:=Pass_set 'ワークシートに保護パスワードを設定します。 Next ws End Sub ' |
(画面クリックして拡大)
指定したワークシート名に対して保護パスワードを設定します。
下記のサンプルプログラムは、指定したワークシート名に対してワークシートの保護パスワードを設定します。
【指定したワークシート名に対して保護設定:条件】
①・・・ワークシート名に「機密情報」が含まれるワークシートは、パスワードを「kimitsu」に設定
②・・・ワークシート名に「個人情報」が含まれるワークシートは、パスワードを「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/protect_unprotect ' Sub Protect04() '指定したワークシート名に対して保護パスワードを設定します。 Dim ws As Worksheet Dim Pass_set As String For Each ws In Worksheets '全てのワークシート繰り返す Select Case True Case ws.Name Like "*個人情報*" ws.Protect Password:="kojin" 'シート名に「個人情報」がある場合は、”Kojin”でパスワードシート保護設定 Case ws.Name Like "*機密情報*" ws.Protect Password:="kimitsu" 'シート名に「機密情報」がある場合は、”kimitsu”でパスワードシート保護設定 End Select Next ws End Sub ' |
(画面クリックして拡大)
●オブジェクト.UnProtect(Password)
※ワークシートを保護を解除します。
記述例:Worksheets(“Sheet1″).UnProtect:=”PassABC”
ワークシートの解除・指定したワークシートの保護の解除
下記のサンプルプログラムは、指定したワークシートの保護を解除するサンプルプログラムです。既にワークシートの保護を行っているワークシート「機密情報」の保護を解除します。
【注意】:ワークシート保護パスワードは、「kimitsu」保護されている条件で下記のプログラムを実行します。
1 2 3 4 5 6 7 8 9 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub UnProtect01() 'ワークシートの保護解除 Worksheets("機密情報").Unprotect Password:="kimitsu" End Sub |
※ワークシート名「機密情報」⇒ 解除パスワード「kimitsu」で解除されました。
【注意】:ワークシートに対して保護パスワードと解除パスワードが異なる時は、下記の実行時エラー’1004’が発生します。このエラー回避方法については、次のサンプル②で説明いたします。
ワークシートの解除・指定したワークシートの保護の解除(実行時エラー回避)
下記のサンプルプログラムは、指定したワークシートの保護を解除するサンプルプログラムです。既にワークシートの保護を行っているワークシート「機密情報」の保護を解除を解除します。今回のサンプルプログラムは、ワークシートの保護を解除する際に、解除パスワードを聞いてきますが、異なるパスワードを入力すると、実行時エラーが発生するのでエラーを回避する仕組みもプログラムに追記しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub UnProtect02() 'ワークシートの保護解除 On Error GoTo UnprotectErr Worksheets("機密情報").Unprotect Exit Sub UnprotectErr: MsgBox Err.Description 'エラー時に発生するメッセージを表示する。 End Sub ' |
(画面クリックして拡大)
指定したワークシート名に対して保護パスワードを解除します。
下記のサンプルプログラムは、指定したワークシート名に対してワークシートの保護パスワードを設定します。
【指定したワークシート名に対して保護を解除:条件】
①・・ワークシート名に「個人情報」が含まれるシートは、パスワード「kojin」で解除する。
②・・ワークシート名に「機密情報」が含まれるシートは、パスワード「kimitsu」で解除する。
③・・その他のワークシートが有る場合は、何もしません。
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/protect_unprotect ' Sub UnProtect03() '指定したワークシート名に対して保護パスワードを解除します。 Dim ws As Worksheet For Each ws In Worksheets '全てのワークシート繰り返す Select Case True Case ws.Name Like "*個人情報*" ws.Unprotect Password:="kojin" 'シート名に「個人情報」がある場合は、”Kojin”パスワードでシート保護を解除 Case ws.Name Like "*機密情報*" ws.Unprotect Password:="kimitsu" 'シート名に「機密情報」がある場合は、”kimitsu”パスワードでシート保護を解除 End Select Next ws End Sub ' |
ワークシートが保護されているか確認する。(確認方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect ' Sub protectCheck01() ' ワークシートが保護されているか確認する。 Dim SheetCheck As Boolean SheetCheck = Worksheets("機密情報").ProtectContents ' シートが保護されているか MsgBox SheetCheck End Sub ' |
①保護されている場合は、「True」
②保護されていない場合は、「False」
(画面クリックして拡大)
全てのワークシートが保護されているか確認する。
下記のサンプルプログラムは、ブックにあるすべてのワークシートの保護状態を確認するサンプルプログラムです。ワークシートを一つずつワークシートの保護状態を確認して、保護状態をメッセージボックで表示させます。
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/protect_unprotect ' Sub protectCheck02() ' 全てのワークシートが保護されているか確認する。 Dim ws As Worksheet Dim SheetCheck As Boolean For Each ws In Worksheets '全てのワークシート繰り返す SheetCheck = ws.ProtectContents If SheetCheck = True Then MsgBox ws.Name & "は、シート保護されています。" Else MsgBox ws.Name & "は、シート保護されていません。" End If Next ws End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。