指定フォルダ配下の圧縮ファイルをすべて解凍します。
今のところ、ALZIPとLhaplusに対応しています。
ExcelのC3セルを、ご自分の環境の解凍ツールのパスに書き換えて使ってください。
よく知らないけど「ALZIP」は韓国製ソフトっぽいです。
このお題をくれた人の環境が「ALZIP」なので使っていますが、ご利用は自己責任でお願いいたします。
こういうツールは頑張りすぎない主義なので、入力チェックなどは最低限です。
あまりスタイリッシュなコードにはなっていなくて気に入らないので、どうでも良くならなかったらリファクタリングします。
コマンドで使える、他の解凍ツールへの対応にリクエストがあれば、追加修正するかもしれません。
ソースコード
Option Explicit '--------------------------------------------------------------------------------------------------- ' 変数 '--------------------------------------------------------------------------------------------------- ' ツール > 参照設定 > Windows Script Host Object Model Private wsh As IWshRuntimeLibrary.WshShell Private oDir As Folder ' フォルダオブジェクト Private oFile As File ' ファイルオブジェクト Private ToolPath As String ' 解凍ツールパス Private UnzipSrc As String ' 解凍元先頭パス Private UnzipDst As String ' 解凍先パス Private UnzipCommandTemplate As String ' 解凍コマンドテンプレート Private commandList As Dictionary ' 解凍ツールのコマンドのリスト '--------------------------------------------------------------------------------------------------- '【処 理 名】初期処理 '--------------------------------------------------------------------------------------------------- Private Sub init() Set wsh = New IWshRuntimeLibrary.WshShell '解凍ツールパス ToolPath = ThisWorkbook.Worksheets("解凍ちゃん").Range("C3").Value '解凍元先頭パス UnzipSrc = ThisWorkbook.Worksheets("解凍ちゃん").Range("C4").Value '解答先パス UnzipDst = ThisWorkbook.Worksheets("解凍ちゃん").Range("C5").Value End Sub '--------------------------------------------------------------------------------------------------- '【処 理 名】終期処理 '--------------------------------------------------------------------------------------------------- Private Sub term() Set oDir = Nothing Set oFile = Nothing Set wsh = Nothing Set commandList = Nothing End Sub '--------------------------------------------------------------------------------------------------- '【処 理 名】解凍 '【処理概要】指定ディレクトリ配下のすべてのgzファイルを解凍する '【引 数】なし '【返 却 値】なし '--------------------------------------------------------------------------------------------------- Public Sub 解凍() '初期化 Call init '入力チェック If Not validation() Then Exit Sub End If 'ツールパスの補正 Call createToolList Call editUnzipCommand 'メイン処理 Call サブフォルダまでくるくるして解凍(UnzipSrc) '終期化 Call term MsgBox "おしまい" End Sub '--------------------------------------------------------------------------------------------------- '【処 理 名】サブフォルダまでくるくるして解凍 '【処理概要】指定ディレクトリ配下のすべてのgzファイルを解凍する '【引 数】[I] ByVal sTopPath As String フォルダパス '【返 却 値】なし '--------------------------------------------------------------------------------------------------- Private Sub サブフォルダまでくるくるして解凍(ByVal sTopPath As String) ' ツール > 参照設定 > Microsoft Scripting Runtime Dim oFso As New FileSystemObject ' ファイルシステムオブジェクト Dim UnzipCommand As String '解凍コマンド '指定フォルダ配下のサブフォルダすべてに対して処理する For Each oDir In oFso.GetFolder(sTopPath).SubFolders Call サブフォルダまでくるくるして解凍(oDir.Path) Next 'フォルダ直下のすべてのファイル For Each oFile In oFso.GetFolder(sTopPath).Files UnzipCommand = Replace(UnzipCommandTemplate, "{src}", oFile.Path) ' コマンドを実行 wsh.Run UnzipCommand DoEvents Next End Sub '--------------------------------------------------------------------------------------------------- '【処 理 名】入力チェック '【処理概要】入力チェックを行う '【引 数】なし '【返 却 値】True エラーなし ' False エラーあり '--------------------------------------------------------------------------------------------------- Private Function validation() As Boolean If ToolPath = "" Then MsgBox ("解凍ツールパスを入力してください。") GoTo LBL_ERROR End If If Dir(ToolPath) = "" Then MsgBox "解凍ツールが存在しません。" GoTo LBL_ERROR End If If UnzipSrc = "" Then MsgBox ("解凍元パスを入力してください。") GoTo LBL_ERROR End If If Dir(UnzipSrc, vbDirectory) = "" Then MsgBox "解凍元ファイルが存在しません。" GoTo LBL_ERROR End If validation = True Exit Function LBL_ERROR: validation = False Exit Function End Function '--------------------------------------------------------------------------------------------------- '【処 理 名】解凍ツール実行コマンド生成 '【処理概要】解凍ツールの実行コマンドを生成する '【引 数】なし '【返 却 値】なし '--------------------------------------------------------------------------------------------------- Private Sub editUnzipCommand() ' ツール > 参照設定 > Microsoft Scripting Runtime Dim oFso As New FileSystemObject ' ファイルシステムオブジェクト Dim key As String key = oFso.GetBaseName(ToolPath) UnzipCommandTemplate = Replace(commandList(key), "{tool}", ToolPath) UnzipCommandTemplate = Replace(UnzipCommandTemplate, "{dst}", UnzipDst) End Sub '--------------------------------------------------------------------------------------------------- '【処 理 名】解凍コマンドリスト生成 '【処理概要】解凍コマンドのリストを生成する '【引 数】なし '【返 却 値】なし '--------------------------------------------------------------------------------------------------- Private Sub createToolList() Dim key As Variant Set commandList = New Dictionary 'ALZIP commandList.Add "ALZipCon", """{tool}"" -x ""{src}"" ""{dst}""" 'LHAPLUS commandList.Add "Lhaplus", """{tool}"" ""{src}"" ""/o:{dst}""" End Sub