【VBA】ZIPファイル(パスワード付き)を解凍(展開)する【7-Zip】

VBAから
 ・ZIPファイル(パスワード付き)を解凍(展開)
できます!

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

PR

前提

「7-Zip」がインストールされていること。

「7-Zip」のインストールの詳細は、以下の記事の「7-Zipのインストール」をご確認ください。

PR

VBAコード

ここでは例として
 ・デスクトップ配下のパスワード付きZIPファイル「test.zip」を
 ・デスクトップ配下のフォルダ「output」配下へ解凍(展開)
します。
※ここではパスワードを「hogehoge」とします。

ZIPファイル
ZIPファイル
Option Explicit

Sub sample()
    
    Dim exe7zip As String
    Dim zipFilePath As String
    Dim destFolderPath 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"""
    '解凍(展開)するZIPファイルのパスを指定
    zipFilePath = "C:\Users\user\Desktop\test.zip"
    '解凍(展開)先フォルダのパスを指定
    destFolderPath = "C:\Users\user\Desktop\output"
    'パスワードを指定
    password = "hogehoge"
    '圧縮コマンドを組み立て
    execCommand = exe7zip & " x -p" & password & " " & zipFilePath & " -o" & destFolderPath & " -aoa"
    
    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行目)
・解凍(展開)するZIPファイルのパス(16行目)
・解凍(展開)先フォルダのパス(18行目)
・パスワードを指定(20行目)

解凍(展開)コマンドを組み立てます(22行目)。
オプション「x」により解凍(展開)となります。

解凍(展開)を実行します(27行目)。
解凍(展開)コマンドを実行します。

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

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

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

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

PR

実行結果

ZIPファイル(パスワード付き)解凍(展開)できました。

実行結果
実行結果
PR

参考①

VBAでZIP形式(パスワード付き)で圧縮することもできます。

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

PR

参考②

7-Zipを使用した解凍(展開)コマンドの詳細は、公式サイトをご確認ください。