zipファイルを展開する。(7-zipのexeファイルによる展開)
VBAを利用してzip形式のファイルを展開(解凍)するには7-zipの実行ファイル(7z.exe)をコマンドで実行することでzipファイルを展開することができます。
※7z.exeを利用して展開させるには、7-zipのソフトウェアをPCにインストールしておく必要があります。7-zipの入手、インストールの実施はご自身で対応をお願いします。(ダウンロードしてインストーラのexeを実行するだけです。)
また7-zipのコマンドのパラメータを利用すればパスワード設定されたzipファイルも展開できます。
7zipのコマンドで利用できるパラメータは他にも多々あるので用途に応じたパラメータを設定することもできます。
●zipファイルを展開(解凍)
'*****************************************************************
' zip展開処理(7z.exe)
'*****************************************************************
Sub unZip_7zExe()
'7z.exeのパスを指定 (パスにスペースが含まれているため""を含めた文字列に変換)
Dim s7zExePath As String
s7zExePath = setDQ("C:\Program Files\7-Zip\7z.exe")
'展開するzipファイルのパス
Dim sZipPath As String
sZipPath = "C:\VBA\archive\ZipTest_7zExe.zip"
'展開先のフォルダの指定
Dim sExtractFolder As String
sExtractFolder = "C:\VBA\archive_unzip\"
'パスワード設定
Dim sPassword As String
sPassword = "pass123"
'展開処理
Dim lRtn As Long
lRtn = unZip_7zExeCmd(s7zExePath, sZipPath, sExtractFolder, sPassword)
'パスワード設定が不要であれば下記を使用
'lRtn = unZip_7zExeCmd(s7zExePath, sZipPath, sExtractFolder)
If lRtn = 0 Then
MsgBox "完了"
Else
MsgBox "展開処理でエラーが発生しました。"
End If
End Sub
'*****************************************************************
' コマンドの作成と実行
'-----------------------------------------------------------------
' 第1引数:7zipの実行ファイル(7z.exe)のパス
' 第2引数:展開するzipファイルのパス
' 第3引数:展開先フォルダ
' 第4引数:パスワード
'-----------------------------------------------------------------
' 戻り値 :実行結果(0:正常終了、0以外:異常終了)
'*****************************************************************
Public Function unZip_7zExeCmd(get7zExe As String, getZipPath As String, getExtract As String, Optional getPassword As String = "") As Long
'FileSystemObjectの作成
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
'展開先フォルダの確認
Dim sDstPath As String
If Not (oFSO.FolderExists(getExtract)) Then
'フォルダが無ければzipファイルのあるフォルダを展開先に指定
sDstPath = oFSO.GetFile(getZipPath).ParentFolder.Path
Else
sDstPath = getExtract
End If
'コマンドの作成
Dim sCmd As String
'設定してるパラメータは下記になります。
' x 展開する
' -o 展開先を指定
' -aoa 既存ファイルをすべて上書き
sCmd = get7zExe & Space(1) & "x" & Space(1) & "-o" & setDQ(sDstPath) & Space(1) & "-aoa" & Space(1)
'パスワード指定があればパスワード設定ありのコマンドにする
'※パスワードが設定されていないzipに対して-pを指定しても展開はできます。
If getPassword <> "" Then
'コマンドの作成(パスワード設定の追加)
sCmd = sCmd & "-p" & getPassword & Space(1)
End If
'展開するファイルをコマンドに追加
sCmd = sCmd & setDQ(getZipPath)
'WScript.Shellオブジェクトの作成
Dim oWSh As Object
Set oWSh = CreateObject("WScript.Shell")
'展開の実行
Dim lRtn As Long
'WindowStyle:=0(バックグランド処理)にしていないのはパスワードが掛かっているファイルにパスワードの"-p"を使用していない場合、処理がパスワードの入力待ち状態となり止まってしまうから。1にしておけば入力待ちの画面が表示されます。
lRtn = oWSh.Run(Command:=sCmd, WindowStyle:=1, WaitOnReturn:=True)
unZip_7zExeCmd = lRtn
Set oWSh = Nothing
End Function
'*****************************************************************
' 'ダブルクォーテーション設定
'-----------------------------------------------------------------
' 第1引数:文字列
'-----------------------------------------------------------------
' 戻り値 :文字列の前後に"を設定した状態の文字列
'*****************************************************************
Function setDQ(ByVal getStr As String) As String
setDQ = """" & Replace(getStr, """", """""") & """"
End Function
■実行結果




