【VBA】ZIPファイルを解凍(展開)する

VBAで
 ・ZIPファイルを解凍(展開)
できます!
※ここで紹介するのは「パスワード無しZIPファイル」の解凍(展開)方法です。

VBAから
 ・Power Shellのコマンドレットを実行
することで実現します!
※コマンドレット「Expand-Archive」により実現します。

実行結果も取得できます!
※正常終了の場合、実行結果は「0」になります。
※異常終了の場合、実行結果は「1」になります。

ZIPファイル(パスワード付き)を解凍(展開)
することもできます!
詳細は以下の記事をご確認ください!


PR

はじめに

他のサイトではZIPファイルを
 ・「CopyHere」メソッドなるものでで解凍(展開)する方法
が紹介されていたりしますが、こちらは動作保証されていません
※公式サイトに動作保証していない旨が記載されています。

動作保証されていない方法を採用するのは、やめておいた方がよいです。

PR

VBAコード

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

ZIPファイル
ZIPファイル

「ken_all.zip」は「郵便局のサイトからダウンロードした郵便番号データ(全国一括)」です。

Option Explicit

Sub execPsCommand()
    
    Dim zipFilePath As String
    Dim destFolderPath As String
    Dim psCommand As String
    Dim wsh As Object
    Dim result As Integer
    
    '解凍(展開)するZIPファイルを指定
    zipFilePath = "C:\Users\user\Desktop\ken_all.zip"
    
    '解凍(展開)先フォルダを指定
    destFolderPath = "C:\Users\user\Desktop\output"
    
    '実行するPowerShellのコマンドレットを組み立て
    psCommand = "powershell -NoProfile -ExecutionPolicy Unrestricted Expand-Archive -Path " & zipFilePath & " -DestinationPath " & destFolderPath & " -Force"
    
    Set wsh = CreateObject("WScript.Shell")
    
    'PowerShellのコマンドレットを実行
    result = wsh.Run(command:=psCommand, WindowStyle:=0, WaitOnReturn:=True)
    
    If (result = 0) Then
        MsgBox ("解凍(展開)が正常終了しました。")
    Else
        MsgBox ("解凍(展開)が異常終了しました。")
    End If
    
    '後片付け
    Set wsh = Nothing
    
End Sub

「解凍するZIPファイル」を指定します(12行目)。
「解凍先フォルダ」を指定します(15行目)。

実行するPower Shellのコマンドレットを組み立てます(18行目)。
※実行するPower Shellのコマンドレット「Expand-Archive」を組み立てます
※オプション「-Force」により、解凍(展開)先フォルダに同名のファイルが存在する場合は上書きします。

ZIPファイルを解凍(展開)します(24行目)。
※Power Shellのコマンドレット「Expand-Archive」を実行します。

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

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

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

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

PR

実行結果

ZIPファイルを解凍(展開)できました。

実行結果①
実行結果①
実行結果②
実行結果②
実行結果③
実行結果③
PR

参考①

ファイル/フォルダをZIP形式で圧縮することもできます。

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

PR

参考②

解凍(展開)する前に、解凍(展開)するZIPファイルの存在確認をしたほうがよいです。

ファイルの存在確認の詳細は、以下の記事をご確認ください。

PR

参考③

上記で使用した以下の詳細は、公式サイトをご確認ください。

●Power Shellのコマンドレット「Expand-Archive」

PR

参考④

上記で使用したZIPファイルは、以下の記事で「インターネットからダウンロードしたファイル」です。