機密情報や重要なデータを含む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で自動的に設定することができます。