【VBA・VBS共通】7-Zipを利用してパスワード付きZIPファイルを解凍をする方法

Tips
スポンサーリンク

最近業務でパスワード付きZIPファイルの解凍処理をVBScriptで作成したのですが、「7-Zip」でパスワード付きZIPファイルをコマンドラインで呼び出して解凍するサンプルプログラムがインターネット上にあまり見当たらなかったので、その時に作ったプログラムを参考までに公開しておきます。

尚、当記事のコードは「VBScript」で書きましたが、ExcelやAccessのVBAでもおそらくコピペで動くはずです。

コマンドライン版「7-Zip」の使い方

過去に当ブログで記事にしております。
コマンドラインで実行する場合の構文やオプションの種類や書き方などは、以下のリンク先をご確認ください。

定番アーカイバ「7-Zip」を利用してコマンドラインで圧縮や解凍をする方法
フリーソフトのインストール不要アーカイバ「7-Zip」を使用して、コマンドラインからファイルやフォルダの圧縮、圧縮ファイルの解凍を実行するコマンドサンプルを紹介します。また、「7-Zip」の特徴やダウンロード方法も併せて解説しています。

VBSから7-Zipを呼び出してパスワード付きZIPを解凍するサンプルプログラム

当項では、VBScriptから「7-Zip」を呼び出して「解凍」処理を実行するサンプルプログラムを紹介します。
尚、当サンプルプログラムでは、より現実的な実装例として、以下の様な処理の流れにしてあります。

  1. 解凍先フォルダにファイルが存在するかチェックし、存在していれば削除
  2. WScript.Shellを生成し、7-Zipをコマンド実行し、実行結果の戻り値を取得
  3. 7-Zipの実行結果の戻り値によって処理を分岐し終了
'変数の宣言を強制
Option Explicit

Call Main()

Sub Main()

    Dim srcZipName          '解凍対象のZipファイルのフルパス
    Dim unZipFolder         '解凍時の出力先フォルダパス
    Dim zipExeName          '7Zipの実行ファイルフルパス
    Dim WshShell            'WshShellオブジェクト
    Dim RtnCode             '7Zipでの処理実行後の戻り値格納用
    Dim objFso              'FileSystemオブジェクト
    Dim objFolder           'Folderオブジェクト


        srcZipName = "C:\test\target.zip"
        'シンタックスハイライトの不具合の為、下の行のダブルクォーテーションの末尾一つは消してください。
        unZipFolder = "C:\output\""
        zipExeName = "C:\tools\7z1900-extra\7za.exe"

        'FileSystemオブジェクトを作成します。
        Set objFso  = CreateObject("Scripting.FileSystemObject")

        '解凍先のフォルダが空か否かを判定し、空ではない場合は入っているファイルを全て削除します。
        'フォルダの空か否かの判定はフォルダサイズで判定
        Set objFolder  = objFso.GetFolder(unZipFolder)
        If objFolder.Size > 0 Then
            '指定されたディレクトリ以下のファイルを全削除します。
            objFso.DeleteFile(unZipFolder & "*.*")
        End If

        'WshShellオブジェクトを作成します。
        Set WshShell = WScript.CreateObject("WScript.Shell")

        '7Zipをコマンドラインから操作して解凍し、処理結果を戻り値で取得します。
        '解凍パスワード:samplepassword ※パスワードの指定が不要なら-psamplepassword を除去
        'Runメソッドの引数内容 1:画面を表示 True:同期処理
        RtnCode = WshShell.Run(zipExeName & " x -y -psamplepassword -o" & unZipFolder & " " & srcZipName,1,True)
        
        If RtnCode <> 0 Then
            '解凍処理でエラーが発生した場合はMsgboxを表示します。
            '実際の処理では、Msgboxを出すと処理が止まってしまう為、メール送信やログ出力に変えてください。
            Msgbox("7Zipの処理でエラーが発生しました。")
        End If

        Set objFolder = Nothing
        Set objFso = Nothing
        Set WshShell = Nothing
        
End Sub

「7-Zip」のコマンドライン実行時の戻り値は、0が正常終了です。
それ以外の戻り値は以下のリンクで掲載されているので、必要によって確認してください。
Exit Codes from 7-Zip

尚、上記サンプルコードは解凍処理ですが、圧縮処理の場合は、上記のサンプルコードの39行目の記述を、当ブログの過去の記事のコマンドライン版「7-Zip」の使い方を参考に書き変えてもらいつつ、その他を多少手直しすれば流用できます。

是非ご活用ください。

それでは、今回も読んでいただきましてありがとうございました。
皆さまご機嫌よう。

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