Categories: VBA基礎

EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)

 

 

EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)

 

 

●はじめに
EXCELを使用していると他人にワークシートを変更させたくない事があると思いますが、その時に使用するのが、ワークシートの保護です。EXCEL VBAでワークシートの保護を行うには、Protectメソッドを利用します。シートを保護する事で、セルの編集が出来ない状態にする事ができます。なお、シート保護を解除する場合は、Unprotectメゾットを利用します。それでは、順番に説明いたします。

 

 

 ●書式の説明  ワークシートの保護【Protectメソッド】

●オブジェクト.Protect(Password)

※ワークシートを保護します。

記述例:Worksheets(“Sheet1″).Protect:=”PassABC”

 

 

ワークシートの保護・指定したワークシートの保護設定

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、指定したワークシートに対して、ワークシートの保護を行うサンプルプログラムです。
プログラムは、一行ですが下記の手順と同じ作業を行います。

【この手順と同じ内容が実行されます。】
①シート「機密情報」を選択します。
②シートの保護を選択
③シートの保護のパスワードを入力します。【kimitsu】
④OKボタンで確定させます。

 

 

'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect
'
Sub Protect01() 'ワークシートの保護


    Worksheets("機密情報").Protect Password:="kimitsu"

    MsgBox "ワークシートを保護しました。"

End Sub

'

 

●実行前~実行後 ※プログラム実行後、指定したシート「機密情報」のワークシートにパスワード保護を設定しました。

(画面クリックして拡大)

 

 

指定したワークシートのみワークシートの保護を行う

 

 

●プログラム説明 (サンプル②)
下記のサンプルプログラムは、指定したワークシートのみ保護を行うサンプルプログラムです。
【3つのワークシートが有ります】下記の通りに、ワークシートの保護を行います。
1・・シート名【一般情報】・・・保護なし
2・・シート名【機密情報】・・・ワークシートの保護 パスワード【kimitsu】
3・・シート名【個人情報】・・・ワークシートの保護 パスワード【kojin】

 

'******* 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
'

 

 

●実行前~実行後 ※プログラム実行後、3つのワークシートのうちシート「機密情報」と「個人情報」の2つのシートの保護を設定されました。
(画面クリックして拡大)

 

 

全てのワークシートに対してワークシートの保護・同じパスワードで保護設定を行う

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、全てのワークシートに対してワークシートの保護・各シートごとにパスワードので保護設定を行う。(ループ設定)

【全てのワークシートに対して、各シートごとにパスワードを設定してシート保護を行う。】

1・・シート名【一般情報】・・・ワークシートの保護 パスワード【ABC】
2・・シート名【機密情報】・・・ワークシートの保護 パスワード【123】
3・・シート名【個人情報】・・・ワークシートの保護 パスワード【あいう】

 

'******* 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」に設定
③・・・それ以外にワークシートが有る場合は、何もしない「ワークシートの保護なし」

 

 

'******* 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メソッド】

●オブジェクト.UnProtect(Password)

※ワークシートを保護を解除します。

記述例:Worksheets(“Sheet1″).UnProtect:=”PassABC”

 

 

ワークシートの解除・指定したワークシートの保護の解除

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、指定したワークシートの保護を解除するサンプルプログラムです。既にワークシートの保護を行っているワークシート「機密情報」の保護を解除します。

【注意】:ワークシート保護パスワードは、「kimitsu」保護されている条件で下記のプログラムを実行します。

 

'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect
'
Sub UnProtect01() 'ワークシートの保護解除


    Worksheets("機密情報").Unprotect Password:="kimitsu"


End Sub

 

 

●実行前~実行後 ※プログラム実行後、指定したワークシート「機密情報」の保護を解除されました。

※ワークシート名「機密情報」⇒ 解除パスワード「kimitsu」で解除されました。

【注意】:ワークシートに対して保護パスワードと解除パスワードが異なる時は、下記の実行時エラー’1004’が発生します。このエラー回避方法については、次のサンプル②で説明いたします。

 

 

ワークシートの解除・指定したワークシートの保護の解除(実行時エラー回避)

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、指定したワークシートの保護を解除するサンプルプログラムです。既にワークシートの保護を行っているワークシート「機密情報」の保護を解除を解除します。今回のサンプルプログラムは、ワークシートの保護を解除する際に、解除パスワードを聞いてきますが、異なるパスワードを入力すると、実行時エラーが発生するのでエラーを回避する仕組みもプログラムに追記しています。

 

 

'******* 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」で解除する。
③・・その他のワークシートが有る場合は、何もしません。

 

'******* 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
'

 

 

●実行前~実行後 ※プログラム実行後、指定したワークシート名に対して保護を解除します。
シートの解除条件:シート名に「個人情報」と「機密情報」が含まれるシートの保護を解除されました。

 

 

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

 

 

●プログラム説明 (サンプル①) ProtectContents

下記のサンプルプログラムは、ワークシートの保護状態を確認するサンプルプログラムです。今回のプログラムは、ワークシート「機密情報」のシートが保護されているか確認します。

 

'******* AKIRA55.COM ****** https://akira55.com/protect_unprotect
'
Sub protectCheck01() ' ワークシートが保護されているか確認する。

    Dim SheetCheck As Boolean

    SheetCheck = Worksheets("機密情報").ProtectContents ' シートが保護されているか

    MsgBox SheetCheck


End Sub
'

 

●実行前~実行後 ※プログラム実行後、ワークシート「機密情報」の保護状態を確認します。
①保護されている場合は、「True」
②保護されていない場合は、「False」
(画面クリックして拡大)

 

 

全てのワークシートが保護されているか確認する。

 

 

●プログラム説明 (サンプル②) ProtectContents

下記のサンプルプログラムは、ブックにあるすべてのワークシートの保護状態を確認するサンプルプログラムです。ワークシートを一つずつワークシートの保護状態を確認して、保護状態をメッセージボックで表示させます。

 

 

'******* 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に関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA