エクセルブックをパスワードロックするユーティリティなマクロ

エクセルVBAでエクセルブックをパスワードを使ってロックするマクロを作成します。
作成したマクロはコピペで個人用マクロブックに設置することが出来ます。

こんにちは、じゅんぱ店長(@junpa33)です。

個人用マクロブックに記述することで、色んなエクセルブックをパスワード付きで、簡単にロックできるマクロを作成します。

個人用マクロブックを事前に設定さえしておけば、先にパスワードを一つだけ設定しておけば、

どんなエクセルファイルでもパスワード付きロックを行うことが出来ます。

今回はそのマクロの設定方法を説明します。

ブックをパスワードロックするマクロの利用法

エクセルブックをパスワードロックする「ブックの保護マクロ」の使い方について説明します。

このマクロを実行するだけで無条件ブックはロックされます。

個人用マクロブックでマクロを記述した「ブックの保護マクロ」プロシージャーのVBAコード内で、事前にパスワードを設定します。

PassWD=”〇〇〇” (デフォルトで”ロック”になっています。)

  •  ②パスワードロックのマクロ呼び出し

パスワードロックしたいエクセルブックを開いて、個人用マクロブックにある「ブックの保護マクロ」を呼び出します。

マクロの呼び出し方は「Alt」+「F8」を押してください。

「ブックの保護マクロ」を選択、「実行ボタン」をクリックします。

マクロの実行ウインドウ
  •  すでにロックされているエクセルブックの場合は、このプロセスはスルーされます。
  •  ロックされていないエクセルブックの場合は、保護するブックが正しいかどうかの確認メッセージが表示されます。

「はい」で保護マクロのコードが進行します。「いいえ」でマクロの実行が解除されます。

vbamacrorockp002
確認メッセージ

マクロを進めると次に、ブックを保護するか、保護解除するかのメッセージが表示されます。

エクセルブックをロックしようとしている場合は、この時に「いいえ」をクリックしてマクロを離脱します。

この時点で、既にこのブックはロック状態になっています。

ロックされているエクセルブックをロック解除したい場合は、「はい」を選択すると解除のためのパスワードが要求されます。

解除の確認メッセージ

初期に設定した正しいパスワードを入力するとロックが解除されます。パスワード入力ボックスには日本語入力も可能です。

パスワード入力ボックス
  •  正しいパスワードの入力

正しいパスワードを入力するとロックが解除されます。

ロック解除メッセージ
  •  間違ったパスワードを入力

パスワードが違う場合は解除不可のメッセージが表示されます。ロック解除プロセスが終了します。

解除不可のメッセージ

パスワードロックするためのVBAコード

このマクロが実行されるVBAコードを説明します。

個人用マクロブックにコピペすれば、簡単にマクロを呼び出せて、簡単に利用することが出来ます。

パスワードロックする全VBAコード

まず最初に、マクロのVBAコード全体を紹介します。

個人用マクロブックに記述する全VBAコードは次のようになります。

VBA
Option Explicit

Sub ブックの保護マクロ()
'*************
    Dim PassWD As Variant
    PassWD = "ロック"
'*************
    Dim Ans1 As Long
        If ActiveWorkbook.ProtectStructure = False Then
            Ans1 = MsgBox("保護するブックは 「 " _
                & ActiveWorkbook.Name & " 」 になります。" _
              & vbCrLf & "保護しますか?", vbYesNo + vbQuestion, _
                "ブックの保護")
            If Ans1 = vbYes Then
                ActiveWorkbook.Protect Password:=PassWD
            Else
                Exit Sub
            End If
        End If
    Dim Ans2 As Long
    Dim Inp As Variant
        If ActiveWorkbook.ProtectStructure = True Then
            Ans2 = MsgBox("ブックは保護されています。" & vbCrLf & _
            "解除しますか?", vbYesNo + vbExclamation, "ブックの保護")
        End If
        If Ans2 = vbYes Then
            Inp = Application.InputBox("パスワードを入力してください", _
                    Title:="PASSWORD", Type:=2)
            If Inp <> PassWD Then
                MsgBox "パスワードが違います。" & vbCrLf & _
                        "初めからやり直してください。"
                Exit Sub
            End If
            ActiveWorkbook.Unprotect Password:=Inp
            MsgBox "ロックが解除されました。"
        Else
            Exit Sub
        End If
End Sub

VBAをパーツ別に解説

パスワード設定の事前設定

パスワードは初期設定で「ロック」にしていますが、適宜オリジナルに変更してください。このマクロを使用する時の共通のパスワートになります。

VBA
'*************
    Dim PassWD As Variant
    PassWD = "ロック"
'*************

マクロを実行する

最初にすでにロックされているエクセルブックかどうかを調べます。

保護されているブックの場合は、「ProtectStructure」が「True」となり保護されていないと「False」が返されます。

シートの状態が保護されているかどうかをチェックすることが最重要ですので、ここでは「ProtectStructure」を使用しなければいけません。(ProtectWindowsでは保護状態を判定できません)

非保護状態のエクセルブックはこの時点でパスワード保護されることになります。

VBA
    Dim Ans1 As Long
        If ActiveWorkbook.ProtectStructure = False Then
            Ans1 = MsgBox("保護するブックは 「 " _
                & ActiveWorkbook.Name & " 」 になります。" _
              & vbCrLf & "保護しますか?", vbYesNo + vbQuestion, _
                "ブックの保護")
            If Ans1 = vbYes Then
                ActiveWorkbook.Protect Password:=PassWD
            Else
                Exit Sub
            End If
        End If

ロック解除のメッセージ表示

既にロックされているエクセルブックに対して、ロックを解除するかどうかを問い合わせします。

最初にロックされていないブックをロックする場合は、ここで「いいえ」をクリックでマクロを離脱します。

条件分岐でロックを解除したい場合は、次の処理コードへ進んでいきます。

VBA
    Dim Ans2 As Long
    Dim Inp As Variant
        If ActiveWorkbook.ProtectStructure = True Then
            Ans2 = MsgBox("ブックは保護されています。" & vbCrLf & _
            "解除しますか?", vbYesNo + vbExclamation, "ブックの保護")
        End If

パスワード入力ボックスの表示

インプットボックスによってパスワードの入力を求めます。

入力された文字は、変数「Inp」に代入されます。

VBA
        If Ans2 = vbYes Then
            Inp = Application.InputBox("パスワードを入力してください", _
                    Title:="PASSWORD", Type:=2)

パスワード入力

入力されたパスワードが、プログラム内で設定されたパスワードと同じかどうかを検査します。

同じ場合は、パスワードロックを解除してマクロを終了します。

違っている場合は、解除作業をキャンセルしてマクロを終了します。

VBA
            If Inp <> PassWD Then
                MsgBox "パスワードが違います。" & vbCrLf & _
                        "初めからやり直してください。"
                Exit Sub
            End If
            ActiveWorkbook.Unprotect Password:=Inp
            MsgBox "ロックが解除されました。"
        Else
            Exit Sub
        End If
End Sub

VBAコード作成のための参考資料

このエクセルブックをパスワードロックするマクロを作成する上で参考にする資料です。

ブック保護についての参考記事

vbabookprotecteyecatchエクセルブックを保護する基本コード エクセルVBA最速理解

メッセージボックスを表示するための参考記事

vbamsgboxeyecatchメッセージボックス MsgBox実際の使い方を最速に理解

入力ボックスを表示するための参考記事

vbainputboxeyecatch2つのインプットボックス。関数とメソッド、特徴を生かした使い分け

条件分岐についての参考記事

vbaifjyokeneyecatch「If条件文」のVBAコードの組み方。条件の絞り方を最速に理解。

個人用マクロブックの設置方法についての参考記事

vbapersonalbkeyecatch個人用マクロブックの簡単作成と削除方法と使い方ガイド

マクロコードを自分のエクセルに取り入れる方法についての参考記事

vbacopipeeyecatchWebで見つけたマクロをコピペで使う

まとめ(作成の注意点)

エクセルブックを保護するVBAコードは難しくありません。

個人用マクロブックにマクロを設置しておけば、少しの作業で簡単に色んなエクセルブックのパスワードロックを設定することが出来ます。

ただし注意点がいくつかありますので、VBAコード作成時には留意が必要です。

  •  Protectメソッドを2回繰り返すと保護が自動解除される。

例えば、次のコードを実行するとエクセルブックは保護解除されます。

VBA
Sub ブックの保護9()
        Workbooks("Book1.xlsm").Protect
        Workbooks("Book1.xlsm").Protect
End Sub

または

保護中のエクセルブックをさらに保護しようとする。

VBA
Sub ブックの保護1()
        Workbooks("Book1.xlsm").Protect
End Sub
VBA
Sub ブックの保護1()
        Workbooks("Book1.xlsm").Protect
End Sub
  •  エクセルブックがプロテクトされていのるかを確認する

エクセルブックが保護されているかどうかは、

ProtectWindows・・・ウインドウの保護状態を調べる

ProtectStructure・・・シートの保護状態を調べる

の2種類があります。

実務上必要なのは「シートの保護状態」のチェックの方が重要です。なので、基本「ProtectStructure」でブックの保護状態を調べないといけません。

  •  個人用マクロブックには「ThisWorkbook」は使わない

当たり前と言えば当たり前のことですが、

個人用マクロブックに記述したマクロを実行するときに、「ThisWorkbook」はどれを指すのかというと「個人用マクロブック」になります。

ですので、個人用マクロブックを呼び出すために開いたエクセルブックは、ThisWorkbookではありません。

開いたエクセルブックを指定するためには、「そのブックの名前」か、フォーカスがあるなら「ActiveWorkbook」で指定する必要があります。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

「エクセルVBA最速理解」の記事一覧を開く

「エクセルVBA業務ツール」の記事一覧を開く

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。