【VBA】ファイル/フォルダをZIP形式(パスワード付き)で圧縮する【7-Zip】

VBAで
 ・ファイル/フォルダをZIP圧縮(パスワード付き)
できます!

VBAから
 ・圧縮解凍ソフト「7-Zip」を実行
することで実現できます!

PR

7-Zipのインストール

公式サイトから最新版のインストーラをダウンロードして、圧縮解凍ソフト「7-Zip」をインストールします。


私は以下のリンクをクリックして、インストーラをダウンロードしました。


ここでは例として、デフォルトのインストール先として設定されていた「C:\Program Files\7-Zip\」へインストールしました。

インストール先
インストール先
PR

VBAコード

ここでは例として
 ・デスクトップ配下の約1GBのフォルダ「test」を
 ・パスワード「hogehoge」で圧縮
 ・デスクトップ配下に圧縮ファイル「test.zip」として作成
します。

フォルダ「test」
フォルダ「test」
フォルダ「test」のサイズは約1GB
フォルダ「test」のサイズは約1GB

圧縮対象は「フォルダ」でなく「ファイル」でも大丈夫です。

Option Explicit

Sub sample()
    
    Dim exe7zip As String
    Dim targetPath As String
    Dim zipFilePath As String
    Dim password As String
    Dim execCommand As String
    Dim wsh As Object
    Dim result As Integer
    
    '7z.exeのパスを指定 ※パスにスペースが含まれているため、「""」で囲んでいます。
    exe7zip = """C:\Program Files\7-Zip\7z.exe"""
    '圧縮するフォルダ(またはファイル)のパスを指定
    targetPath = "C:\Users\user\Desktop\test"
    '作成するZIPファイルのパスを指定
    zipFilePath = "C:\Users\user\Desktop\test.zip"
    'パスワードを指定
    password = "hogehoge"
    '圧縮コマンドを組み立て
    execCommand = exe7zip & " a -ssw -p" & password & " " & zipFilePath & " " & targetPath
    
    Set wsh = CreateObject("WScript.Shell")
    
    '圧縮コマンドを実行
    result = wsh.Run(command:=execCommand, WindowStyle:=0, WaitOnReturn:=True)
    
    If (result = 0) Then
        MsgBox ("圧縮が正常終了しました。")
    Else
        MsgBox ("圧縮が異常終了しました。")
    End If
    
    '後片付け
    Set wsh = Nothing
    
End Sub

以下を指定します。
・7za.exeのパスを指定(14行目)
・圧縮するフォルダ(またはファイル)のパス(16行目)
・作成するZIPファイルのパス(18行目)
・パスワード(20行目)

圧縮コマンドを組み立てます(22行目)。
オプション「a」により圧縮となります。

圧縮を実行します(27行目)。
圧縮コマンドを実行します。

Run」メソッドの引数「WindowStyle」に「0」を指定することで、PowerShell画面を表示にできます(27行目)。
※「1(規定値)」を指定すると表示になります。

Run」メソッドの引数「WaitOnReturn」に「True」を指定することで、同期実行になります(27行目)。
※「False(規定値)」を指定すると同期実行になります。

ここでいう「同期実行」とは、
 ・圧縮の処理完了後にVBAへ制御が返ってくるように実行
という意味です。
※圧縮コマンドの処理が完了するまでは、VBAの処理は停止して先に進みません。

圧縮コマンドが正常終了した場合、「戻り値(実行結果)」として「0」が返されます(29~33行目)。
※異常終了の場合は「1」が返されます。

PR

実行結果

ZIP形式(パスワード付き)圧縮できました。

正常終了メッセージ
正常終了メッセージ
作成された圧縮ファイル
作成された圧縮ファイル
PR

指定したパスワードで解凍(展開)できることを確認

「作成された圧縮ファイル」を右クリックして[7-Zip]-[展開]をクリックすると、画面が表示されます。

右クリックして[7-Zip]-[展開]
右クリックして[7-Zip]-[展開]


表示された画面に「パスワード」を入力して「OK」をクリックすると、無事に解凍(展開)できました。
※ここでは例として、デスクトップ上の「temp」フォルダ配下へ解凍(展開)しました。

解凍(展開)の画面
解凍(展開)の画面
解凍(展開)を実行中…
解凍(展開)を実行中…
デスクトップ上の「temp」フォルダ配下へ解凍(展開)された
デスクトップ上の「temp」フォルダ配下へ解凍(展開)された
PR

参考①

VBAでZIPファイル(パスワード付き)を解凍(展開)することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

7-Zipを使用した圧縮コマンドの詳細は、公式サイトをご確認ください。

タイトルとURLをコピーしました