エクセルのパスワードを忘れた・開けないを解消【パスワードが長いと難しい】

エクエルのパスワードを忘れてしまい開けなくなってしまったファイルを開く方法をご紹介します。結果としてパスワードが長いと難しいです。
はじめに
この記事ではエクセルの読み取りの解除方法についてご紹介します。
エクセルの読み取りパスワードを忘れてファイルが開けなくなってしまった方に参考になるかと思います。
この記事で紹介すること
- エクセルの読み取りパスワードを総当たりで解除するVBAコードを紹介します
-ちょっと使えるネタを紹介-
エクエルのパスワードを忘れてしまい開けなくなってしまったファイルを開く方法をご紹介します。結果としてパスワードが長いと難しいです。
この記事ではエクセルの読み取りの解除方法についてご紹介します。
エクセルの読み取りパスワードを忘れてファイルが開けなくなってしまった方に参考になるかと思います。
この記事で紹介すること
目次から見たい項目へ移動すると便利ですよ。
目次
そもそもエクセルが開かないのは読み取りパスワードが設定されているからです。
エクセルのパスワードには用途に応じていくつか種類があります。
エクセルのパスワードにはシート、ブック、書き込み、読み取りのパスワードがあります。
エクセルのファイルが開かないのはこの中の読み取りパスワードが設定されているからです。
他のパスワードでシート、ブック、書き込みのパスワードについてはパスワードを忘れてしまっても簡単に解除することができます。
その点についてはこちらでまとめています。
シート、ブック、書き込みのパスワードについてはエクセルを.zipファイルに変換して中身を変更してパスワードを解除することができますが、読み取りパスワードだけはできません。
この記事では総当たり方式で読み取りパスワードを解除する方法をご紹介します。
総当たり方式はその名の通りすべてのパスワードパターンを一つずつ実行していきパスワードを解除するという方法になります。
やることは単純なので、Excel VBAコードも比較的シンプルに作成することができます。
Excel VBAで総当たり方式を作成するに際にそもそもパスワードに使える文字がなにかを知る必要があります。
パスワードに使える文字はChr関数を使ってShift-JISの形式で取り出すことができます。
Chr関数にいれることができる1~255の引数を入力した結果を見てみます。
このShift-JISの中からパスワードとして使うことができるのは塗りつぶした範囲の33番目~126番目になります。
この文字を使って総当たりでパスワードを解除していくことになります。
エクセルのパスワードを開く総当たり方式のVBAコードをご紹介します。
パスワードで使える文字ですべての組み合わせのパスワードを作ってエクセルを開くというのを繰り返します。
Public ChrData 'Shift-Jisコードを保存 Public Hozon 'パスワードを一時保存 Public Lo '桁数 Public Lo_Count '探索する文字数 Public St_Lo 'ループする回数 Public FilePath 'パスワード付きファイルのフルパス Public flag_End '探索をとめるフラグ 'パスワードを解析する Sub Analyze_Password() Lo = 2 '桁数 Lo_Count = 126 - 33 + 1 '文字の種類 FilePath = ThisWorkbook.Path & "\パス保護.xlsx" 'パスワードを解除するエクセルファイルのパス ReDim Hozon(0 To Lo - 1) As Variant St_Lo = Lo 'ループの回数(固定) flag_End = 0 'ループを止めるフラグ Call GetChr '文字列を取得 Call OpenFile(Lo) 'パスワードを作成してエクセルファイルを開く End Sub
'Shift-JISを取得
Sub GetChr()
ReDim ChrData(1 To 126 - 33 + 1) As Variant
m = 0
For i = 33 To 126
m = m + 1
ChrData(m) = Chr(i)
Next
End Sub
'ファイルを開く Sub OpenFile(ByVal Lo As Variant) Lo = Lo - 1 If Lo >= 0 Then For i = 1 To Lo_Count 'パスワード作成 Hozon(Lo) = ChrData(i) Pass = "" For j = 0 To St_Lo - 1 Pass = Hozon(j) & Pass Next 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
最初にChr関数でShift-JISの文字を取得しています。
パスワードで使える33番目~126番目の文字を取得しています。
m = 0 For i = 33 To 126 m = m + 1 ChrData(m) = Chr(i) Next
パスワードの文字候補は94文字になります。結構な数です。
次にパスワードの候補を作成していきます。
Sub Analyze_Password() Lo = 2 '桁数 Lo_Count = 126 - 33 + 1 '文字数 FilePath = ThisWorkbook.Path & "\パス保護.xlsx" '解除するエクセルファイルのパス ReDim Hozon(0 To Lo - 1) As Variant St_Lo = Lo 'ループの回数(固定) Call OpenFile(Lo) '再帰するコード End Sub
最初にパスワードの桁数を設定しておきます。
Sub OpenFile(ByVal Lo As Variant) Lo = Lo - 1 If Lo >= 0 Then For i = 1 To Lo_Count 'パスワード作成 Hozon(Lo) = ChrData(i) Pass = "" For j = 0 To St_Lo - 1 Pass = Hozon(j) & Pass '←ここでパスワード候補を作成 Next 'ここでファイルを開く Call OpenFile(Lo) '←ここで再帰する Next End If End Sub
『OpenFile』のコードを指定した桁数『Lo』だけ再帰させてパスワードを作成しています。
こんな感じでパスワードを作成することができます。
候補が多いので候補の一部だけを貼っておきます。
パスワードを指定してエクセルファイルを開きます。
Workbooks.Open Filename:=FilePath, Password:=Pass
『Workbooks.Open』でエクセルファイルを開きます。引数に『Password:=Pass』としてパスワードを入力してファイルを開きます。
パスワードが間違っていている場合はエラーがでますので『On Error Resume Next』でエラーがでたらスキップさせています。
エラーが出た場合は『Err.Number』が『1004』となります。エラーが出なかった場合は『0』となりますので、『Err.Number』が『0』となったらコードを止めています。
エクセルファイルのパスワード解析が無事成功したらパスワードを表示させています。
On Error Resume Next
Workbooks.Open Filename:=FilePath, Password:=Pass
If Err.Number = 0 Then 'エラーの場合1004 エラーなし0
MsgBox "開けました。パスワードは " & Pass & " です"
Exit Sub
End If
説明したVBAコードを使って読み取りパスワードが設定されたエクセルファイルを開いてみます。
設定したパスワードとPCの環境を記載しておきます。
パスワードは2桁で『12』としました。
もちろん実行する際はこのパスワードはわからないものとしていますが、パスワードが2桁ということはわかっていることとします。
実行したPCの環境です。
実行した結果です。
無事パスワードを解除してエクセルファイルを開くことができました。
パスワードは『12』です。と出ています。
実行に要した時間は、『355.8 秒』です。
2桁のパスワード解析で『355.8 秒』です。時間がかかりすぎですね。
今回使用したPCの環境では1個のパスワードを試すのに『0.2 秒』ほどかかります。
これはどうしても縮められないので総当たりでやってしまうと2桁だと最大で94文字×94文字×0.2秒=1767.2秒かかる計算になります。約30分ですね。
3桁で46時間、4で180日かかってしまいます。
パスワード解析する際は以下のような改善をしないと厳しいです。
パスワードの中の特定ワードがわかっている場合はそのワードを参考にしてパスワード候補を作成することです。
パスワードは桁数が大きくなればなるほど多大な時間を要します。
なのでその桁数を減らすのが一番効果的です。パスワードの中にこのワード入れたかもというのがあればそれを採用してパスワード候補を作成すると解析時間を大幅に短縮することができるかと思います。
パスワードを設定する際に『!』や『%』のような記号の文字はあまり使わないかと思います。
なのでパスワード設定した際に絶対これは使っていない文字があればそれを除外してパスワード候補を作成するのが効果的です。
使える文字候補は94文字あります。これをすべて使うと94の累乗で候補が増えてしまいますので、文字候補を減らせればかなり解析時間の短縮につながります。
一旦パスワード解析を中止して、次パスワード解析をする際は途中から始められるようにするのも改善策の一つだと思います。
これはパスワード解析が長期戦になった際に有効な手段だと思います。
力技ですね。
1台で時間がかかるのであれば、PCを複数台にすれば単純にパスワード解析が早くなります。
この場合は、パスワード候補を分割できるようなコードを作成する必要になりますのでそのVBAコードを作成する必要があります。
今回はエクセルのパスワードを総当たりで解析する方法についてご紹介しました。
結果としては、単純な総当たりではかなり厳しくて改善が必要という結果になっています。
パスワードを設定する側からするとやはりパスワードを長くするというのは大事ですね。
エクセルのパスワードがわからなくなって開けなくなってしまった際に少しは役立つかと思います。
最後までご覧くださいましてありがとうございました。
関連する記事から探す
カテゴリから見たい項目を探すと便利ですよ。
↓キーワードを入力する