大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、読み取り専用で開く方法と、パスワード付きファイルを開く方法について、ご紹介します。読み取り専用で開いたり、パスワード付きファイルを開く方法は、VBAで自動化すると、作業が楽になります。具体的なVBAコードを使って、読み取り専用で開く方法と、パスワードの解除について、解説していきます。

はじめに

この記事では、読み取り専用で開く方法と、パスワード付きファイルを開く方法について、ご紹介します。

読み取り専用で開くには、「ReadOnly:=True」を使います。

パスワード付きファイルを開く場合には、「Password:=〇〇」を使えば、開けます。

VBAを使えば、読み取り専用で開くのも、パスワードを解除するのも、自動化できますので、便利です。

では、読み取り専用で開く方法と、パスワード付きファイルを開く方法について、解説していきます。

この記事で紹介すること

  • 読み取り専用で開く
  • パスワード付きファイルを開く

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、読み取り専用で開く方法と、パスワード付きファイルを開く方法について、VBAコードをまとめておきます。

VBAコードだけを見たいという場合に、ご活用ください。

'ファイルパスを指定
a = ThisWorkbook.Path & "\TEST.xlsx"
Workbooks.Open FileName:=a, ReadOnly:=True '読み取り専用で開く
Workbooks.Open FileName:=a, Password:=123 'パスワード付きファイルを開く

では、解説していきます。

VBAでファイルを読み取り専用で開く

VBAで、Excelファイルを読み取り専用で開く方法について、ご紹介します。

ファイルの中身を確認だけしたい場合に、読み取り専用で開く方法が使えます。

読み取り専用で開けば、ファイルを開いている間も、他の人がファイルを修正することができます。

ファイルを開く

まず、ファイルを開く方法です。

「Workbooks.Open」を使います。

VBAコードはこんな感じです。

Sub TEST1()
    
    'ファイルパスを指定
    a = ThisWorkbook.Path & "\TEST.xlsx"
    'ファイルを開く
    Workbooks.Open FileName:=a
    
End Sub

では、実行してみます。

ファイルを開く

ファイルを開いた結果

ファイルを開くことができました。

読み取り専用で開く

読み取り専用で開くには、「Workbooks.Open」の引数に、「ReadOnly:=True」をつけます。

VBAコードはこんな感じになります。

Sub TEST2()
    
    'ファイルパスを指定
    a = ThisWorkbook.Path & "\TEST.xlsx"
    '読み取り専用で開く
    Workbooks.Open FileName:=a, ReadOnly:=True
    
End Sub

では、実行してみます。

読み取り専用で開く

ReadOnlyを使って読み取り専用で開いた結果

ファイルを、読み取り専用で開くことができました。

ファイルの中身だけ確認したい場合に使えます。

VBAでパスワード付きファイルを開く

続いて、パスワード付きファイルを開く方法です。

パスワードを毎回入力するのは、面倒くさいので、VBAを使って自動でパスワードを解除させましょう。

パスワード付きファイルを開く

パスワード付きファイルを開く方法は、「Workbooks.Open」の引数に「Password:=パスワード」を入力します。

VBAコードは、こんな感じになります。

Sub TEST3()
    
    'ファイルパスを開く
    a = ThisWorkbook.Path & "\TEST.xlsx"
    'パスワード付きファイルを開く
    Workbooks.Open FileName:=a, Password:=123
    
End Sub

もちろん、パスワードがわかっている場合ですね。

パスワード付きファイルを用意しました。

パスワード入力画面

パスワード付きファイルを開いた場合

パスワードは、「123」にしています。

では、VBAを実行してみます。

パスワード付きファイルを開く

パスワード付きファイルをWorkbooks.Openで開いた結果

パスワード付きファイルを、開くことができました。

パスワードが事前にわかっていて、開く回数が多い場合は、VBAを使うと楽になります。

パスワードを解除して保存

パスワードを解除して保存する方法です。

毎回パスワードを入力するのが面倒なので、一旦パスワードを解除して保存しておく方法です。

必要であれば、後でパスワードを再設定するといいでしょう。

VBAコードはこちらになります。

Sub TEST4()
    
    'ファイルパスを指定
    a = ThisWorkbook.Path & "\TEST.xlsx"
    'パスワード付きファイルを開く
    Workbooks.Open FileName:=a, Password:=123
    
    Application.DisplayAlerts = False 'メッセージを非表示
    'パスワードを削除して保存
    ActiveWorkbook.SaveAs Password:=""
    
    'ファイルを閉じる
    ActiveWorkbook.Close
    
End Sub

パスワードが設定されているファイルを用意しました。

パスワード付きファイル

パスワードが設定されているファイルを用意

では、VBAコードを実行して、ファイルを開いてみます。

パスワードを解除して保存

パスワードを解除して保存した結果

パスワードの画面は、表示されていません。

パスワードを設定する画面にも、パスワードの設定はありません。

パスワード設定の画面

パスワードの設定画面

パスワードを解除して、ファイルを保存することができました。

パスワードを設定する画面で、解除してもいいんですけども、解除するファイルが大量にあると面倒ですよね。

そんなときは、VBAでパスワード解除の作業を自動化しましょう。

ファイルにパスワードを設定

先ほどとは、反対にファイルにパスワードを設定する方法です。

パスワードを一旦解除して、保存していたので、再度パスワードを付け直す、という場合に使えます。

Sub TEST5()
    
    'ファイルパスを指定
    a = ThisWorkbook.Path & "\TEST.xlsx"
    'ファイルを開く
    Workbooks.Open FileName:=a
    
    Application.DisplayAlerts = False 'メッセージを非表示
    'パスワードを設定して保存
    ActiveWorkbook.SaveAs Password:=123
    
    'ファイルを閉じる
    ActiveWorkbook.Close
    
End Sub

パスワードが設定されていないExcelファイルを用意しました。

パスワードが設定されていないファイル

パスワードが設定されていないExcelファイルを用意

では、VBAコードを実行して、パスワードを設定してみます。

パスワードを設定

VBAでパスワードを設定した結果

パスワードを設定できました。

パスワードを設定したり、解除したりしたい場合には、VBAを使うと楽できます。

わからなくなったパスワードを解除

ちなみ読み取りパスワードが分からなくなると、結構やっかいです。

読み取り以外の、書き込みパスワード、ブックパスワード、シートパスワードなどは、簡単に解除できます。

ただ、読み取りパスワードだけは、難しいです。

方法としては、

  • 力技で解除する
  • 有料ソフトを使う

の方法があります。

力技で解除する

力技で解除するとは、自分でパスワードを作成して全通りの組み合わせで、パスワード解除していく方法です。

全通りなので、かなり時間がかかります。

パスワードを3桁で、設定したExcelファイルを用意しました。

3桁のパスワードを設定

パスワードを数字3桁で設定したExcelファイルを用意

条件として、パスワードは、3桁の数字とします。

パスワード付きファイルを解除するVBAコードです。

Public ChrData 'Shift-Jisコードを保存
Public PassArray 'パスワードを一時保存
Public FilePath 'パスワード付きファイルのフルパス
Public flag_End '探索をとめるフラグ

'パスワードを解析する
Sub Analyze_Password()
    
    Dim Lo
    Lo = 3 '桁数
    
    FilePath = ThisWorkbook.Path & "\TEST.xlsx" 'パスワードを解除するエクセルファイルのパス
    ReDim PassArray(0 To Lo - 1) As Variant 'パスワードを格納
    flag_End = 0 'ループを止めるフラグ
    
    'パスワード検索用の文字を取得
    ReDim ChrData(1 To 10) As Variant
    m = 0
    For i = 0 To 9
        m = m + 1
        ChrData(m) = i '0~9の数字
    Next
    
    Call OpenFile(Lo) 'パスワードを作成してエクセルファイルを開く
    
End Sub


'ファイルを開く
Sub OpenFile(ByVal Lo As Variant)
    
    Lo = Lo - 1
    
    '桁数だけループ
    If Lo >= 0 Then
        '文字数だけループ
        For i = 1 To UBound(ChrData)
            
            'パスワード作成
            PassArray(Lo) = ChrData(i) '1文字を更新
            Pass = Join(PassArray, "") '文字列を結合
            
            'ファイルを開けたら終了
            If flag_End = 1 Then Exit Sub
            
            'ファイルを開く
            On Error Resume Next
            Workbooks.Open FileName:=FilePath, Password:=Pass
            If Err.Number = 0 Then 'エラーの場合1004 エラーなし0
                flag_End = 1 'パスワード解析をストップ
                MsgBox "開けました。パスワードは " & Pass & " です"
                Exit Sub
            End If
            
            '再帰する
            Call OpenFile(Lo)
        Next
    End If

End Sub

では、パスワード付きファイルを解除してみます。

3桁のパスワードを解除

パスワード付きファイルを解除した結果

なんとか、パスワードを解除してファイルを開くことができました。

問題は、時間です。

かかった時間

かかった時間は、「48.96 秒」となりました。

力技で、全通りを使って、パスワードを解除するとなると、やはり時間がかかります。

数字3桁で、50秒程度なので、文字を含めるとさらに時間がかかりますね。

有料ソフトを使う

あとは、有料ソフトを使うという方法です。

最近では、有料ではありますけれども、全通りではなく辞書式や、ある程度的を絞った方法で、パスワードを解除するという方法があります。

本当に困ってしまった場合は、このような有料のソフトを使うのもありです。

読み込みパスワードだけは、簡単に解除できないので、使う際は気を付けて使いましょう。

おわりに

この記事では、読み取り専用で開く方法と、パスワード付きファイルを開く方法について、ご紹介しました。

読み取り専用で開くには、「ReadOnly:=True」を使います。

パスワード付きファイルを開く場合には、「Password:=〇〇」を使えば、開けます。

VBAを使えば、読み取り専用で開くのも、パスワードを解除するのも、自動化できますので、便利です。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す