【EXCEL:VBA】パスワード付きZipファイルを一括で作成したい

パスワード付きZipファイルを作成したい

この記事では、ExcelVBAを利用して「指定したファイルやフォルダを対象にパスワード付きZipファイルを作成する」方法について説明しています。

 

Zip化したいファイルやフォルダを好きなだけ指定してZipファイルを作成できるようになります。

また、Zipファイルそれぞれのパスワードを変えることもできます。

ボタン1つ押すだけで、指定したファイルやフォルダをパスワード付きZipファイルにすることができます。

 

今回ご紹介する機能を利用すれば、パスワードの設定間違いを無くし、確実にZipファイルを作成できるようになります。

 

また、パスワードを設定したくない場合も、パスワード無しのZipファイルを作成することができます。

 

 

それでは、「パスワード付きZipファイルを一括で作成する」機能を作っていきましょう。

 

困っている女性

メールでお客様にパスワード付きのZipファイルを大量に送ることがあるの。

困っている女性

圧縮するファイルを間違えてはいけないし、パスワードも間違えてはいけないし、疲れるわ・・・。

困っている女性

ボタン1つ押すだけで、一括でパスワード付きZipファイルを作成する方法はないの?
それなら、VBAを使えばボタン1つ押すだけで、パスワード付きZipファイルを作成できるようになるよ。

解決する男性

今回はVBAの機能だけでは、パスワード付きZipファイルを作成することができないので、フリーソフトの「7-Zip」というアプリケーションを用意する必要があるけど、簡単だよ。

解決する男性

困っている女性

会社のパソコンにフリーソフトをインストールすることができないから、その「7-Zip」を使うことはできないわ。
大丈夫だよ。「7-Zip」はダウンロードして、圧縮ファイルを解凍し、フォルダに置いておくだけで利用できるようになるよ。

解決する男性

困っている女性

それなら、大丈夫だわ。

困っている女性

それじゃあ、早くやり方を教えてよ。

 

もくじ

概要図(一括でパスワード付きZipファイルを作成する機能)

今回作成する「一括でパスワード付きZipファイルを作成する機能」の概要図は、以下です。

一括でパスワード付きZipファイルを作成する機能

一括でパスワード付きZipファイルを作成する機能

 

ダウンロードした「7-Zip」のファイルパスとZip化したいファイルまたはフォルダのパス、設定したいパスワードを指定すれば、一括でパスワード付きZipファイルを作成してくれます。

 

◆他にも、一括で面倒な作業をボタン1つ押すだけでやってくれる機能については、以下もありますよ。

【EXCEL:VBA】一括で大量にフォルダを作成したい

 

【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アプリケーションをダウンロードします。

7-Zipをダウンロードする

7-Zipをダウンロードする

 

ダウンロードしたZipファイル(7za920.zip)をフォルダに配置します。

ダウンロードした7-Zipファイルをフォルダに配置する

ダウンロードした7-Zipファイルをフォルダに配置する

 

ダウンロードした「7-Zip」アプリケーションを解凍する

そして、ダウンロードしたZipファイルを解凍します。

解凍すると、以下のファイルが出現します。

ダウンロードしたZipファイルを解凍

ダウンロードしたZipファイルを解凍する

 

今回利用する7-Zipアプリケーションは、「7za.exe」です。

この「7za.exe」をVBAで利用するので、あとでこのファイルパスを利用します。

 

7-Zipファイルパス指定欄、Zip化したいファイルまたはフォルダパスとパスワードを設定する欄を準備する

まず、先程ダウンロードした7-Zipファイル(7za.exe)パスを指定する欄を作成します。

次に、パスワード付きZipファイルにしたいファイル(またはフォルダ)のパスと設定したパスワードを設定する欄を作成します。

 

「メインシート」を作成する

メインシートを作成する

メインシートを作成する

 

  1. 「メイン」という名前のシートを作成します。
  2. A1とB1セルを結合し、「7za.exeのファイルパス」のタイトル行を作成します。
  3. A2とB2セルを結合し、「7za.exeのファイルパス」の入力欄を作成します。
  4. A3セルに「Zip化したいファイルまたはフォルダパス」のタイトル行を作成します。
  5. B3セルに「パスワード」のタイトル行を作成します。
  6. A列の4行目以降は、「Zip化したいファイルまたはフォルダパス」を入力する欄になります。
  7. B列の4行目以降は、「パスワード」を入力する欄になります。

 

※ちなみに、指定した1行毎にZipファイルが作成されます。

 

VBAでパスワード付きZipファイルを作成する機能を作成する

開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。

Microsoft Visual Basic for Applicationsを起動する

Microsoft Visual Basic for Applicationsを起動する

 

「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。

VBAプログラムを入力する(その1)

VBAプログラムを入力する(その1)

 

VBAプログラムを入力する(その2)

VBAプログラムを入力する(その2)

 

標準モジュールを追加して、以下のソースを書きます。

最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。

 

パスワード付きZipファイルを作成する機能の使い方

それでは、ファイルやフォルダを対象にパスワード付きZipファイルを作成する方法を説明します。

「7za.exeのファイルパス」と「zip化したいファイルパス(フォルダパス)」と「パスワード」を入力する

まず、A2セルに先程ダウンロードした7-Zip7za.exe)のファイルパスを入力します。

次に、A列の4行目以降にzip化したい「ファイルパス(フォルダパス)」を入力します。

B列にZipファイルに設定したい「パスワード」を入力します。

「パスワード」を入力しなかった場合は、パスワードなしのZipファイルが作成されます。

パスワード付きZipファイルに必要な情報を入力する

パスワード付きZipファイルに必要な情報を入力する

4行目、5行目はファイルパス、6行目はフォルダパスです。

フォルダパスを指定した場合、フォルダ毎Zipファイル化します。

複数ファイルを1つのZipファイルにしたい場合は、フォルダパスを指定します。

 

5行目はパスワードを入力していないので、パスワードなしのZipファイルが作成されます。

 

 

「パスワード付きZipファイルを作成する」マクロを実行する

次に、「開発」タブの「マクロ」をクリックします。

VBAプログラムを実行する

VBAプログラムを実行する

 

先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。

次に、「実行」ボタンをクリックします。

実行ボタンをクリックする

実行ボタンをクリックする

 

しばらく待つと、指定したファイルやフォルダを対象にZipファイルが作成されます。

Zipファイルが作成される

Zipファイルが作成される

 

ちなみに、Zipファイルが作成されるフォルダは、指定されたファイルやフォルダが存在するフォルダになります。

 

パスワード付きZipファイルを作成するVBAプログラム(MainProc)の説明

それでは、VBAプログラム(MainProc)を説明します。

①参照するシートを変数に格納する

ここでは、このあとの処理で何度も使う「メイン」シートを変数に格納しています。

そうすることにより、入力するプログラムを短くすることができるからです。

何度も「ThisWorkbook.Sheets(“メイン”)」と入力するより、「shtMain」と入力するほうがコードが少なくてよいからです。

 

②7za.exeのファイルパスを変数に格納する

ここでは、先程ダウンロードした7Zipアプリケーション(7za.exe)のファイルパスを変数に格納しています。

7Zipアプリケーションは、Zipファイルを作成するのに利用します。

 

③Zip化したいファイルまたはフォルダパスの最終行を取得する

ここでは、4行目以降に入力した「Zipファイルまたはフォルダパス」が入力されている最終行を取得しています。

これをすることにより、A列の何行目までパスが設定されいるか知ることができます。

つまり、Zip化したい対象ファイルパス(フォルダパス)がいくつ設定されているか判断できます。

 

④WScript.Shellを変数に格納する

ここでは、EXCEL以外のアプリケーションを起動するのに利用するWScirpt.Shellを変数に格納しています。

具体的には、WScript.Shellを利用してDOSコマンド経由で7Zipアプリケーション(7za.exe)を操作します。

そうすることにより、Zipファイルを作成できるようになります。

 

⑤FileSystemObjectを変数に格納する

ここでは、ファイル操作するために「FileSysteObject」を変数に格納しています。

このあとで、指定されたZip化したいファイル(またはフォルダ)がファイルかどうかを調べるために利用します。

 

⑥Zip化したいファイルまたはフォルダパス数分処理を繰り返す

ここでは、A列の4行目から指定されているファイルパス(またはフォルダパス)が入力されている最終行までを対象として、後続の処理を繰り返し実行します。

 

⑦Zip化したいファイルまたはフォルダパスを変数に格納する

ここでは、A列に入力されているZip化したいファイルパスまたはフォルダパスを変数に格納しています。

 

⑧Zip化したあとのファイル名を変数に格納する

ここでは、Zip化したあとのファイル名を変数に格納しています。

A列に指定されているパスがファイルパスかフォルダパスかによって、処理が分岐しています。

ファイルパスが指定されている場合、ファイルパスの最後の拡張子を”zip”に変更しています。

フォルダパスが指定されている場合、単純に”.zip”をA列に入力されているフォルダパスの最後に付加しています。

 

⑨パスワードを変数に格納する

ここでは、B列に指定されているパスワードを変数に格納しています。

 

⑩7za.exeの実行コマンドを作成する

ここでは、7-Zipアプリケーション(7za.exe)を実行するコマンドを作成して、変数に格納しています。

パスワードが入力されている場合は、パスワード付きZipファイルを作成するコマンドを作成します。

パスワードが入力されていない場合は、パスワードなしZipファイルを作成コマンドを作成しています。

 

⑪Zipファイルを作成する

ここでは、先程変数に格納した「WScript.Shell」を利用して、DOSコマンド上で7-Zipアプリケーションを実行しています。

“cmd /c”は、DOSコマンドを実行し、処理が終わったらDOSコマンド画面を閉じるコマンドになります。

 

「vbHide」を指定することにより、DOSコマンド画面を非表示にしています。

また、最後に指定している「1」は、DOSコマンド実行が完了するまで待つ(同期)ように指定しています。

そうすることにより、Zipファイル作成中にVBAの実行が次の処理にいかずに、待機するようになります。

 


 

結果として、メインシートに指定されているファイルまたはフォルダを対象に、Zipファイルを作成することができるようになりました。

 

パスワード付きZipファイルやパスワードなしZipファイルが簡単に一括で作成できるようになりましたので、面倒な作業から開放されました。

 

以上です。

 

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です