【Excel VBA】ブックに2種類のパスワードを設定して保存する方法

機密情報や重要なデータを含むExcelファイルを保護するために、パスワードを設定するのは一般的なセキュリティ対策です。VBAを使えば、このパスワード設定もSaveAsメソッドの一部として自動化できます。

Excelには、目的の異なる2種類のパスワード、「読み取りパスワード」と「書き込みパスワード」があります。この記事では、それぞれのパスワードをVBAで設定する方法と、その違いを明確に解説します。


目次

2種類のパスワードの違い

まず、2つのパスワードがどのような役割を持つのかを理解することが重要です。

種類VBA引数機能ユーザーへの影響
読み取りパスワードPasswordブックを開くこと自体を制限します。パスワードを知らないと、ファイルの中身を一切見ることができません。
書き込みパスワードWriteResPasswordブックの上書き保存を制限します。パスワードを知らない場合でも「読み取り専用」でファイルを開き、閲覧することは可能です。

Google スプレッドシートにエクスポート


VBAコードの例

SaveAsメソッドの引数にPasswordまたはWriteResPasswordを指定することで、これらの保護を適用できます。

① 読み取りパスワードを設定して保存

このパスワードを知らないと、ブックを開くことすらできなくなります。

Sub SaveWithOpenPassword()

    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    Dim openPass As String
    openPass = "opensesame" ' 読み取りパスワード
    
    ' Password引数を指定して保存
    targetBook.SaveAs _
        Filename:=ThisWorkbook.Path & "\OpenProtectedBook.xlsx", _
        Password:=openPass

    MsgBox "読み取りパスワードを設定して保存しました。"
    
End Sub

② 書き込みパスワードを設定して保存

このパスワードを知らないユーザーは、ファイルを「読み取り専用」として開くことになり、上書き保存ができなくなります。(別名保存は可能)

Sub SaveWithWritePassword()

    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    Dim writePass As String
    writePass = "edit_ok" ' 書き込みパスワード
    
    ' WriteResPassword引数を指定して保存
    targetBook.SaveAs _
        Filename:=ThisWorkbook.Path & "\WriteProtectedBook.xlsx", _
        WriteResPassword:=writePass
        
    MsgBox "書き込みパスワードを設定して保存しました。"

End Sub

③ 読み取り・書き込み両方のパスワードを設定して保存

両方の引数を同時に指定することで、二重の保護をかけることも可能です。

Sub SaveWithBothPasswords()

    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    ' 両方のパスワードを設定
    targetBook.SaveAs _
        Filename:=ThisWorkbook.Path & "\FullyProtectedBook.xlsx", _
        Password:="opensesame", _
        WriteResPassword:="edit_ok"

    MsgBox "読み取り・書き込み両方のパスワードを設定して保存しました。"
    
End Sub

コードのポイント解説と注意点

.SaveAs の Password 引数

ブックを開くためのパスワードを設定します。最も強力な保護方法です。

.SaveAs の WriteResPassword 引数

編集・上書きを制限するためのパスワードを設定します。内容の閲覧は許可しつつ、不用意な変更を防ぎたい場合に有効です。

【重要】パスワードの管理について

サンプルコードのように、VBAコード内にパスワードを直接記述する(ハードコーディング)ことは、セキュリティ上推奨されません。VBAの編集画面を開ける人なら誰でもパスワードを見ることができてしまいます。

マクロを実行する人にその都度パスワードを入力させるInputBoxを使うなど、より安全な方法を検討してください。


まとめ

ブックの保存時にパスワードを設定するには、SaveAsメソッドの引数を使います。

  • 閲覧を制限したい場合: Password引数
  • 編集・上書きを制限したい場合: WriteResPassword引数

これらの引数を使い分けることで、ファイルの機密性や用途に応じた適切なセキュリティレベルをVBAで自動的に設定することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次