【Excel VBA】パスワードで保護されたExcelブックを開く方法

VBAで他のブックを操作する際、対象のブックが「読み取りパスワード」で保護されているケースがあります。このようなブックも、VBAを使えばパスワードを自動で入力して開くことが可能です。

この記事では、Workbooks.OpenメソッドのPassword引数を使った基本的な方法と、より安全にパスワードを取り扱うための推奨される方法を合わせて解説します。


目次

パスワードを指定してブックを開く基本コード

まずは、VBAコード内にパスワードを記述してブックを開く基本的な方法です。

Sub OpenProtectedWorkbook_Basic()

    ' 変数を宣言します
    Dim filePath As String
    Dim filePassword As String
    Dim protectedBook As Workbook
    
    ' 開きたいブックのパスを指定
    filePath = ThisWorkbook.Path & "\Protected_Data.xlsx"
    
    '【注意】VBA内にパスワードを直接記述する方法
    filePassword = "secret123"
    
    ' Password引数を指定してブックを開く
    Set protectedBook = Workbooks.Open(Filename:=filePath, Password:=filePassword)
    
    '--- 開いた後の処理 ---
    If Not protectedBook Is Nothing Then
        MsgBox "「" & protectedBook.Name & "」を開きました。"
        protectedBook.Close SaveChanges:=False ' 確認のため、保存せずに閉じる
        Set protectedBook = Nothing
    End If
    
End Sub

コードのポイント解説

Workbooks.Openメソッドを実行する際に、Passwordという名前付き引数に対して、文字列でパスワードを指定します。 Workbooks.Open(Filename:="ファイルパス", Password:="パスワード")

これにより、パスワード入力のダイアログボックスを表示させることなく、ファイルを直接開くことができます。


【重要】パスワードの取り扱いに関するセキュリティ上の注意

上記の基本コードのように、VBAコード内にパスワードを直接書き込む(ハードコーディングする)ことは、セキュリティ上、非常に危険です。

VBE(VBAの編集画面)を開くことができる人なら誰でも、コードからパスワードを平文で読み取れてしまいます。ファイルにVBAプロジェクトのパスワードを掛けても、簡易的な保護にしかなりません。

そのため、パスワードのハードコーディングは避け、次に紹介するような、マクロ実行時に入力を促す方法を強く推奨します。


【推奨】InputBoxを使い、安全にパスワードを入力させる方法

より安全な方法は、マクロを実行したタイミングでInputBoxを表示し、ユーザーにその都度パスワードを入力してもらうことです。これなら、ファイル内にパスワードが残ることはありません。

コード例

Sub OpenProtectedWorkbook_Secure()

    ' 変数を宣言します
    Dim filePath As String
    Dim userInputPassword As String
    Dim protectedBook As Workbook

    ' 開きたいブックのパスを指定
    filePath = ThisWorkbook.Path & "\Protected_Data.xlsx"
    
    ' InputBoxを表示して、ユーザーにパスワードを入力させる
    userInputPassword = InputBox("保護されたブックのパスワードを入力してください:", "パスワード入力")
    
    ' キャンセルボタンが押された、または入力が空の場合は処理を終了
    If userInputPassword = "" Then Exit Sub
    
    ' パスワードが間違っていた場合のエラーを処理する準備
    On Error Resume Next
    
    ' 入力されたパスワードでブックを開く
    Set protectedBook = Workbooks.Open(Filename:=filePath, Password:=userInputPassword)
    
    ' エラーが発生した場合(パスワードが違うなど)の処理
    If Err.Number <> 0 Then
        MsgBox "パスワードが違うか、ファイルを開けませんでした。", vbCritical
        Exit Sub
    End If
    
    ' エラー処理を元に戻す
    On Error GoTo 0
    
    '--- 開いた後の処理 ---
    MsgBox "「" & protectedBook.Name & "」を正常に開きました。"
    protectedBook.Close SaveChanges:=False
    '----------------------
    
    Set protectedBook = Nothing

End Sub

コードのポイント解説

  • InputBox(...): ユーザーに文字入力を促すダイアログボックスを表示し、入力された値を返します。
  • On Error Resume Next: VBAでエラーが発生しても処理を中断せず、次の行に進むようにする命令です。パスワードが間違っているとWorkbooks.Openでエラーが発生するため、これを使ってエラーを検知・処理しています。

まとめ

パスワード付きのブックを開くには、Workbooks.OpenメソッドのPassword引数を利用します。

  • 基本の方法: コード内にパスワードを直接記述するが、セキュリティリスクが高く非推奨
  • 推奨される方法: **InputBox**を使い、マクロ実行時にユーザーからパスワードを入力してもらう。これにより、ファイル内にパスワードを残さず、安全に処理を実行できる。

機密情報を含むファイルを扱う際は、必ず後者の安全な方法を採用するようにしてください。

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

この記事を書いた人

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

目次