Categories: VBA基礎

EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)【ワークシートの操作】②

 

 

EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)【ワークシートの操作】②

 

 

●はじめに

今回は、前回の続きとなります。EXCEL VBA ワークシートの保護・保護解除(Protectメソッド・Unprotect メゾット)の使用方法を説明したいと思います。前回、説明出来なかった下記の項目を中心に説明いたします。

①指定した入力用のセルを除外(ロックを外す)してシートを保護する。
②ユーザーにワークシートの保護解除パスワードを入力させます。
③ブックのワークシートが保護されているか、されていないかを調べる。
④シートの保護時に行の挿入・行の削除を可能にする。
⑤計算式が入力されているセルをシート保護する

それでは順番に、ワークシートの保護・ワークシートの保護解除の利用方法をサンプルプログラムを交えて説明いたします。

【ワークシートの保護・保護解除の基礎については、こちらを参照してください。】
https://akira55.com/worksheet_protect/

 

 

 

指定した入力用のセルを除外(ロックを外す)してシートを保護する

 

 

●プログラム説明 (サンプル④) Protectメゾット

下記のサンプルプログラムは、ワークシートの保護を行うプログラムですが、普通にワークシートの保護を行ってしまうと、ワークシート全体が保護されてしまい。確かにワークシートの内容は、壊されないけどデータも登録などが行えなくなってしまいます。今回は、ユーザーに入力できる部分のセルに対して保護ロックを外すサンプルプログラムです。


●プログラム実行条件
ワークシート名を「請求書”」

 

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

 

 

●実行前~実行後 ※プログラムを実行後、指定したセル(黄色)を除きワークシートの保護されました。黄色枠は、セルのロックされていないので、シート保護されていますが、文字列は入力する事が出来ます。(セルの保護ロックのチェックを外したため)
(画面クリックして拡大)

 

 

指定したワークシートに対して「セルの書式のロック」にチェックを入れる。(チェックを外す)

 

 

●プログラム説明 (サンプル⑤)  Unprotectメゾット

下記のサンプルプログラムは、指定したワークシートに対して「セルの書式」のロックにチェックを付けて、かつ、シートの保護を解除するサンプルプログラムです。

【こんな時に便利】
どのセルに【セルの書式】のロックにチェックを外したのか分からなくなり、シート全体にロックのチェックを付けたい場合。

【使用例】
・シート全体に対して保護ロックにチェックはするには、「ActiveSheet.Cells.Locked = True」
・シート全体に対して保護ロックにチェックを外すには、「ActiveSheet.Cells.Locked = False」

【プログラムで実行する内容】
①ワークシートの保護を解除します。
②ワークシート内の全セルに対して【セルの書式】のロックにチェックを入れます。

●プログラム実行条件
ワークシート名を「請求書”」
ワークシート「請求書」がシートパスワードロックされている状態  パスワード:「seikyu」

 

 

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

 

 

 ●実行前~実行後 ※プログラム実行後、ワークシートの全てのセルの保護ロックにチェックが入りました。
(画面クリックして拡大)

 

 

ブック内のワークシートがシート保護されているか、されていないかを調べる

 

 

●プログラム説明 (サンプル⑥)  ProtectContentsプロパティ

下記のサンプルプログラムは、ブック内のワークシートが保護されているのか、保護されていないのかを全てのワークシートに対して調べます。

【使用例】
ActiveSheet.ProtectContents = True  ※ワークシートは保護されています。
 ActiveSheet.ProtectContents = False    ※
ワークシートは保護されていません。

 

 

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

 

 

●実行前~実行後 ※プログラム実行後、ブック内のワークシートの状態を順番に調べます。
(画面クリックして拡大)

 

 

ワークシートを保護しても行の挿入・行の削除を可能にする

 

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

下記のサンプルプログラムは、ワークシートを保護しても行の挿入・行の削除を可能にするサンプルプログラムです。


●プログラム実行条件
ワークシート名を「個人別売上」
ワークシート「個人別売上」がシートパスワードロックされている状態  パスワード:「kojin」

●今回は、ワークシートの保護で、行挿入・削除を許可を設定しましたが、他にも列の挿入・削除など機能設定がありますので、下記を参照して下さい。

Protect メソッド 引数一覧
引数既定値説明
Passwordワークシートのパスワードを設定します。この設定したパスワードは、保護解除する時に必要になります。
DrawingObjectsTrue描画オブジェクト(図形)を保護するには、 True を指定します。Falseで解除
ContentsTrueグラフ全体が保護されます。Trueで保護します。
ScenariosTrueシナリオを保護するには、 True を指定します。 この引数はワークシートの場合のみ有効です。
UserInterfaceOnlyFalseTrue を指定すると、画面上からの変更はできません。(保護)VBA(マクロ)からの変更は保護されません。 この引数を省略すると、VBA(マクロ)からも、画面上からも保護されて変更することができなくなります。
AllowFormattingCellsFalseTrue を指定すると、保護されたワークシートのセルを書式設定することができます。
AllowFormattingColumnsFalseTrue を指定すると、保護されたワークシートの列を書式設定することができます。
AllowFormattingRowsFalseTrueを指定すると、保護されたワークシートの行を書式設定できます。
AllowInsertingColumnsFalseTrue を指定すると、保護されたワークシートに列を挿入することができます。
AllowInsertingRowsFalseTrue を指定すると、保護されたワークシートに行を挿入することができます。
AllowInsertingHyperlinksFalseTrueを指定すると、保護されたワークシートにハイパーリンクを挿入することが許可されます。
AllowDeletingColumnsFalseTrue を指定すると、保護されたワークシートの列を削除することができ、削除される列のセルはすべてロック解除されます。
AllowDeletingRowsFalseTrue を指定すると、保護されたワークシートの行を削除することができ、削除される行のセルはすべてロック解除されます。
AllowSortingFalseTrue を指定すると、保護されたワークシートで並べ替えを行うことができます。 並べ替え範囲内のセルは、ロックと保護が解除されている必要があります。
AllowFilteringFalseTrue を指定すると、保護されたワークシートにフィルターを設定することができます。
AllowUsingPivotTablesFalseTrueを指定すると、保護されたワークシートでピボットテーブルとピボットグラフを使用することができます。

 

'
'******** 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プロパティを利用して数式を判断してくれます。
HasFormulaプロパティの利用例
A = Range(“A1”).HasFormulaA = Trueの場合は、数式が含まれる
A = false の場合は、数式が含まれない。●プログラム実行条件
ワークシート名を「個人別売上」
ワークシート「個人別売上」がシートパスワードロックされている状態  パスワード:「kojin」

 

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

 

AKIRA