今回は、 フォルダ内の Excel ファイルにかかっている パスワード を 一括解除 するVBAマクロ ツール を作ってみたのでシェアしますね。
こんにちは、ゆう(@ProgYuki)です。
パスワードがかかっているExcelファイルを開く時にいちいちパスワードを入力するのが面倒と思うことってありませんか?
特に子会社等に同じファイルをばら撒いて、データを入力してもらい、それらを回収して集計する時等ファイルが複数ある場合はさらに面倒ですね。
私も仕事の中で100社以上から送られてくるパッケージ(Excelファイル)をAlteryxで集計する際にパスワードを解除してないとエラーが発生するので、パスワード解除しておく必要があった時に手作業で100個以上のファイルを開いて、パスワードを解除するなんて面倒すぎてムリ、、、と思った時がありました。
ということで、Excelファイルにかかっているパスワードを一括解除するVBAマクロツールを作ってみましたので、シェアしたいと思います。
Excel VBA ツール : フォルダ内の全 Excel ファイルの パスワード を 一括解除 する
マクロ ツール の機能、使用用途、使い方
機能
このツールの機能は、
フォルダと解除用パスワードを指定すると、指定されたフォルダ内の全てのExcelファイルのパスワードを一括解除する
というものです。
使用用途
使用用途は、
- パスワードがかかったExcelファイルを複数取り扱う時
- データ集計用のツール等にExcelファイルを流す時にパスワード解除をしておく必要がある時
等を想定しています。
使い方
コードをコピーする場所やプログラムの起動の仕方は後ほど説明しますが、使い方としては、
- パスワード解除したいExcelファイルを特定のフォルダにまとめておいて
- VBAプログラムを起動し、
- フォルダを選択し、
- 解除用パスワードを入力すると
- 指定フォルダ内の全てのExcelファイルのパスワードが解除される
という感じです。
*今回のツールでは、解除用パスワードは全ファイルで同一である必要があります。
複数パスワードがある場合は、パスワードの異なるファイル毎にフォルダ分けをして、上記と同様に実行すれば解決できます。
画像つきで示すと、
①パスワード解除したいExcelファイルを特定のフォルダにまとめておいて
例として、3つのExcelファイルを「test」というフォルダに格納しています。
②VBAプログラムを起動し、
起動の仕方はいろいろとあります。
ご自身でも調べてみると良いと思いますが、一番わかりやすい方法としては、タブの
「開発」→「マクロ」
と進むと実行できるマクロの一覧が表示されるので、今回は「UnprotectFiles」という名前にしているので、それを選択して「実行」を押せば実行されます。
③フォルダを選択し、
マクロを実行すると、ポップアップが出てくるので、フォルダを指定します。
今回は、「test」というフォルダの中に3つのExcelファイルが入っているので、「test」を選択した状態でOKを押します。
④解除用パスワードを入力すると
次に解除用のパスワードの入力が求められるので、パスワードを入力して、OKを押します。
パスワードは、全ファイルで同一である必要があります。
⑤指定フォルダ内の全てのExcelファイルのパスワードが解除される
パスワードが問題なく解除されると上記の通りメッセージが出て、パスワードが解除されます。
パスワードが間違っている場合は、下記の通りエラー表示になるようにしています。
ちなみに、パスワードがかかってないExcelファイルが混じっていても問題なくプログラムは実行されて、全てのファイルのパスワードが解除されます。
異なるパスワードが設定されているファイルが混じっている場合は、入力した解除用パスワードと異なるところまで処理が実行され、そこでストップし、エラー表示になります。
うまく実行できましたかね?
もし、何かエラー等があれば、コメントかTweetでご連絡いただけると幸いです。
VBA コードの表示
コードの全文は下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Sub UnprotectFiles() On Error GoTo Err Done: Dim FilePath As String Dim FilePassword As Variant '①フォルダの指定 With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False If .Show = True Then FilePath = .SelectedItems(1) & "\" Else Exit Sub End If End With '②解除用パスワードの指定 FilePassword = InputBox _ ("解除するパスワードを入力してください", "パスワード入力") If FilePassword = False Then Exit Sub With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlCalculationManual End With Dim buf As String Dim myBook As String Dim TargetBook As Workbook buf = Dir(FilePath & "*.xls*") myBook = ThisWorkbook.Name '③ファイルを一つづつ開き、パスワードを空にして保存 Do While buf <> "" Set TargetBook = Workbooks.Open _ (Filename:=(FilePath & buf), Password:=FilePassword) With TargetBook If .Name <> myBook Then .SaveAs Filename:=(FilePath & buf), Password:="" .Close End If End With buf = Dir() Loop With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With MsgBox "パスワード解除完了", vbOKOnly + vbInformation, "パスワード一括解除マクロ" Exit Sub Err: MsgBox "エラーが発生しました。正しいパスワードを入力してください。", vbOKOnly + vbInformation, "パスワード一括解除マクロ" End Sub |
一見コードが長く見えますが、
- ‘ ①フォルダの指定
- ‘ ②解除用パスワードの指定
- ‘ ③ファイルを一つづつ開き、パスワードを空にして保存
と書いてあるコードのブロックがメインです。
ちなみに
- どこにコードをコピぺすれば良いのか
- VBAマクロを実行する上での注意点
については、下記の記事で詳しく書いているので、そちらを参考にされてみてください。
この記事もツール紹介の記事ですが、「VBA プログラムの表示」の項目の後に詳しいコードのコピペの仕方や注意点について書いてます。
ということで本日は以上になります。
私もVBA含めプログラミングを学習中の身なので、
「もっとこうした方が効率的に書けるよ!」
「こんな業務効率化したいんだけど、VBAでできるかな?」
など、ご指摘やアイディアなどをいただけると嬉しいので、コメントやいただけると幸いです!
Excel VBAを独学したい方向けに記事を書きましたので、興味がある方はこちらもご参考にされてみてください

それでは、本日もお読みいただきありがとうございました。
Twitter(@ProgYuki)でも情報発信しているので、ぜひフォロー、いいね、RT等お願いします!
ゆう
コメント
VBAでPWを一括解除するプログラム・・・最高でした。
仕事で100個近いPW付のエクセルファイルをひとつづつ開いて作業していましたが、
時間もさることながら忍耐力の限界を感じ、こういうVBAが無いかと色々探し
ゆうさんのブログを見つけました。
試したところ【最高】でした。すばらしいです。
VBAはほとんど使ったことがありませんでしたので、ブログで紹介されていたテキストを
購入し、これから勉強してみようと考えております。
もう感謝しかありません。
お礼がしたくてコメントさせていただきました。
ありがとうございました。そしてこれからも有意義なブログ期待しております。