この記事では、ExcelVBAを利用して「指定したファイルやフォルダを対象にパスワード付きZipファイルを作成する」方法について説明しています。
Zip化したいファイルやフォルダを好きなだけ指定してZipファイルを作成できるようになります。
また、Zipファイルそれぞれのパスワードを変えることもできます。
ボタン1つ押すだけで、指定したファイルやフォルダをパスワード付きZipファイルにすることができます。
今回ご紹介する機能を利用すれば、パスワードの設定間違いを無くし、確実にZipファイルを作成できるようになります。
また、パスワードを設定したくない場合も、パスワード無しのZipファイルを作成することができます。
それでは、「パスワード付きZipファイルを一括で作成する」機能を作っていきましょう。
困っている女性
困っている女性
困っている女性
解決する男性
解決する男性
困っている女性
解決する男性
困っている女性
困っている女性
もくじ
概要図(一括でパスワード付きZipファイルを作成する機能)
今回作成する「一括でパスワード付きZipファイルを作成する機能」の概要図は、以下です。
ダウンロードした「7-Zip」のファイルパスとZip化したいファイルまたはフォルダのパス、設定したいパスワードを指定すれば、一括でパスワード付きZipファイルを作成してくれます。
◆他にも、一括で面倒な作業をボタン1つ押すだけでやってくれる機能については、以下もありますよ。
【EXCEL:VBA】フォルダに存在するCSVファイルを全て取り込みたい
【EXCEL:VBA】サブフォルダを含む全てのフォルダやファイルの情報を取得したい
【EXCEL:VBA】ランダムなパスワード生成とパスワード管理がしたい
それでは、一括でパスワード付きZipファイルを作成する機能を、1つ1つ順番に説明していきます。
パスワード付きZipファイルを作成するフリーソフト「7-Zip」を入手する
まず、フリーソフト「7-Zip」をダウンロードしましょう。
そして、ダウンロードしたZipファイルを解凍します。
「7-Zip」アプリケーションをダウンロードする
以下のサイトにアクセスします。
https://www.7-zip.org/download.html
開いたサイトから、以下の画像を参考にお目当ての7-Zipアプリケーションをダウンロードします。
ダウンロードしたZipファイル(7za920.zip)をフォルダに配置します。
ダウンロードした「7-Zip」アプリケーションを解凍する
そして、ダウンロードしたZipファイルを解凍します。
解凍すると、以下のファイルが出現します。
今回利用する7-Zipアプリケーションは、「7za.exe」です。
この「7za.exe」をVBAで利用するので、あとでこのファイルパスを利用します。
7-Zipファイルパス指定欄、Zip化したいファイルまたはフォルダパスとパスワードを設定する欄を準備する
まず、先程ダウンロードした7-Zipファイル(7za.exe)パスを指定する欄を作成します。
次に、パスワード付きZipファイルにしたいファイル(またはフォルダ)のパスと設定したパスワードを設定する欄を作成します。
「メインシート」を作成する
- 「メイン」という名前のシートを作成します。
- A1とB1セルを結合し、「7za.exeのファイルパス」のタイトル行を作成します。
- A2とB2セルを結合し、「7za.exeのファイルパス」の入力欄を作成します。
- A3セルに「Zip化したいファイルまたはフォルダパス」のタイトル行を作成します。
- B3セルに「パスワード」のタイトル行を作成します。
- A列の4行目以降は、「Zip化したいファイルまたはフォルダパス」を入力する欄になります。
- B列の4行目以降は、「パスワード」を入力する欄になります。
※ちなみに、指定した1行毎にZipファイルが作成されます。
VBAでパスワード付きZipファイルを作成する機能を作成する
開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。
「Microsoft Visual Basic for Applications」に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 68 69 |
Public Sub MainProc() Dim shtMain As Worksheet Dim wsh As Object Dim fso As Object Dim maxRow As Long Dim i As Long Dim exePath As String Dim command As String Dim taisyoPath As String Dim zipFilePath As String Dim password As String '①メインシートを変数に格納する Set shtMain = ThisWorkbook.Sheets("メイン") '②7za.exeのファイルパスを変数に格納する exePath = shtMain.Cells(2, 1) '③Zip化したいファイルまたはフォルダパスの最終行を取得する maxRow = shtMain.Cells(shtMain.Rows.Count, 1).End(xlUp).Row '④WScript.Shellを変数に格納する Set wsh = CreateObject("WScript.Shell") '⑤FileSystemObjectを変数に格納する Set fso = CreateObject("Scripting.FileSystemObject") '⑥Zip化したいファイルまたはフォルダパス数分処理を繰り返す For i = 4 To maxRow '⑦Zip化したいファイルまたはフォルダパスを変数に格納する taisyoPath = shtMain.Cells(i, 1) '⑧Zip化したあとのファイル名を変数に格納する If fso.FileExists(taisyoPath) Then 'ファイルの場合 zipFilePath = Left(taisyoPath, Len(taisyoPath) - Len(fso.getExtensionName(taisyoPath))) & "zip" Else 'フォルダの場合 zipFilePath = taisyoPath & ".zip" End If '⑨パスワードを変数に格納する password = shtMain.Cells(i, 2) '⑩7za.exeの実行コマンドを作成する command = exePath & " a -tzip" If password <> "" Then command = command & " -p" & password End If command = command & Space(1) & zipFilePath command = command & Space(1) & taisyoPath '⑪Zipファイルを作成する wsh.Run "cmd /c " & command, vbHide, 1 Next Set wsh = Nothing Set fso = Nothing MsgBox "完了" End Sub |
最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。
パスワード付きZipファイルを作成する機能の使い方
それでは、ファイルやフォルダを対象にパスワード付きZipファイルを作成する方法を説明します。
「7za.exeのファイルパス」と「zip化したいファイルパス(フォルダパス)」と「パスワード」を入力する
まず、A2セルに先程ダウンロードした7-Zip(7za.exe)のファイルパスを入力します。
次に、A列の4行目以降にzip化したい「ファイルパス(フォルダパス)」を入力します。
B列にZipファイルに設定したい「パスワード」を入力します。
「パスワード」を入力しなかった場合は、パスワードなしのZipファイルが作成されます。
4行目、5行目はファイルパス、6行目はフォルダパスです。
フォルダパスを指定した場合、フォルダ毎Zipファイル化します。
複数ファイルを1つのZipファイルにしたい場合は、フォルダパスを指定します。
5行目はパスワードを入力していないので、パスワードなしのZipファイルが作成されます。
「パスワード付きZipファイルを作成する」マクロを実行する
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックします。
しばらく待つと、指定したファイルやフォルダを対象にZipファイルが作成されます。
ちなみに、Zipファイルが作成されるフォルダは、指定されたファイルやフォルダが存在するフォルダになります。
パスワード付きZipファイルを作成するVBAプログラム(MainProc)の説明
それでは、VBAプログラム(MainProc)を説明します。
①参照するシートを変数に格納する
1 2 |
'①メインシートを変数に格納する Set shtMain = ThisWorkbook.Sheets("メイン") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“メイン”)」と入力するより、「shtMain」と入力するほうがコードが少なくてよいからです。
②7za.exeのファイルパスを変数に格納する
1 2 |
'②7za.exeのファイルパスを変数に格納する exePath = shtMain.Cells(2, 1) |
7Zipアプリケーションは、Zipファイルを作成するのに利用します。
③Zip化したいファイルまたはフォルダパスの最終行を取得する
1 2 |
'③Zip化したいファイルまたはフォルダパスの最終行を取得する maxRow = shtMain.Cells(shtMain.Rows.Count, 1).End(xlUp).Row |
これをすることにより、A列の何行目までパスが設定されいるか知ることができます。
つまり、Zip化したい対象ファイルパス(フォルダパス)がいくつ設定されているか判断できます。
④WScript.Shellを変数に格納する
1 2 |
'④WScript.Shellを変数に格納する Set wsh = CreateObject("WScript.Shell") |
具体的には、WScript.Shellを利用してDOSコマンド経由で7Zipアプリケーション(7za.exe)を操作します。
そうすることにより、Zipファイルを作成できるようになります。
⑤FileSystemObjectを変数に格納する
1 2 |
'⑤FileSystemObjectを変数に格納する Set fso = CreateObject("Scripting.FileSystemObject") |
このあとで、指定されたZip化したいファイル(またはフォルダ)がファイルかどうかを調べるために利用します。
⑥Zip化したいファイルまたはフォルダパス数分処理を繰り返す
1 2 |
'⑥Zip化したいファイルまたはフォルダパス数分処理を繰り返す For i = 4 To maxRow |
⑦Zip化したいファイルまたはフォルダパスを変数に格納する
1 2 |
'⑦Zip化したいファイルまたはフォルダパスを変数に格納する taisyoPath = shtMain.Cells(i, 1) |
⑧Zip化したあとのファイル名を変数に格納する
1 2 3 4 5 6 7 8 9 10 |
'⑧Zip化したあとのファイル名を変数に格納する If fso.FileExists(taisyoPath) Then 'ファイルの場合 zipFilePath = Left(taisyoPath, Len(taisyoPath) - Len(fso.getExtensionName(taisyoPath))) & "zip" Else 'フォルダの場合 zipFilePath = taisyoPath & ".zip" End If |
A列に指定されているパスがファイルパスかフォルダパスかによって、処理が分岐しています。
ファイルパスが指定されている場合、ファイルパスの最後の拡張子を”zip”に変更しています。
フォルダパスが指定されている場合、単純に”.zip”をA列に入力されているフォルダパスの最後に付加しています。
⑨パスワードを変数に格納する
1 2 |
'⑨パスワードを変数に格納する password = shtMain.Cells(i, 2) |
⑩7za.exeの実行コマンドを作成する
1 2 3 4 5 6 7 8 9 |
'⑩7za.exeの実行コマンドを作成する command = exePath & " a -tzip" If password <> "" Then command = command & " -p" & password End If command = command & Space(1) & zipFilePath command = command & Space(1) & taisyoPath |
パスワードが入力されている場合は、パスワード付きZipファイルを作成するコマンドを作成します。
パスワードが入力されていない場合は、パスワードなしZipファイルを作成コマンドを作成しています。
⑪Zipファイルを作成する
1 2 |
'⑪Zipファイルを作成する wsh.Run "cmd /c " & command, vbHide, 1 |
“cmd /c”は、DOSコマンドを実行し、処理が終わったらDOSコマンド画面を閉じるコマンドになります。
「vbHide」を指定することにより、DOSコマンド画面を非表示にしています。
また、最後に指定している「1」は、DOSコマンド実行が完了するまで待つ(同期)ように指定しています。
そうすることにより、Zipファイル作成中にVBAの実行が次の処理にいかずに、待機するようになります。
結果として、メインシートに指定されているファイルまたはフォルダを対象に、Zipファイルを作成することができるようになりました。
パスワード付きZipファイルやパスワードなしZipファイルが簡単に一括で作成できるようになりましたので、面倒な作業から開放されました。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。