VBA ログ管理テンプレート(アーカイブフォルダ内のログをZIP圧縮:Shell呼び出し版)
Excel VBA単体ではZIP圧縮機能は持っていませんが、Windows標準の「圧縮フォルダ」機能を Shell で呼び出すことで、アーカイブフォルダ内のログを自動でZIP化できます。以下はサンプルコードです。
サンプルコード
Option Explicit
'=== アーカイブフォルダ内のログをZIP圧縮 ===
Sub ZipArchiveLogs()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim archivePath As String
Dim zipFilePath As String
archivePath = ThisWorkbook.Path & "\Archive"
zipFilePath = ThisWorkbook.Path & "\ArchiveLogs.zip"
Set fso = CreateObject("Scripting.FileSystemObject")
' アーカイブフォルダが存在しない場合は終了
If Not fso.FolderExists(archivePath) Then
MsgBox "アーカイブフォルダが存在しません。", vbExclamation
Exit Sub
End If
' 既存ZIPがあれば削除
If fso.FileExists(zipFilePath) Then
fso.DeleteFile zipFilePath
End If
' 空のZIPファイルを作成(Windows圧縮フォルダ)
Open zipFilePath For Output As #1
Print #1, "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Close #1
' ShellでZIPにファイルをコピー
Dim sh As Object
Set sh = CreateObject("Shell.Application")
Set folder = fso.GetFolder(archivePath)
Dim zipFolder As Object
Set zipFolder = sh.NameSpace(zipFilePath)
For Each file In folder.Files
zipFolder.CopyHere file.Path
' コピーが完了するまで待機(簡易的に1秒待つ)
Application.Wait (Now + TimeValue("0:00:01"))
Next file
MsgBox "アーカイブフォルダ内のログをZIP圧縮しました: " & zipFilePath, vbInformation
End Sub
VBこのコードのポイント
- Archiveフォルダ内のファイルをまとめて
ArchiveLogs.zipに圧縮 - 既存ZIPは削除して再作成 → 常に最新状態に更新
- Shell.Application を利用してZIPフォルダにファイルをコピー
- 待機処理を入れてコピー完了を確実にする(簡易的に1秒)
実務でのメリット
- 古いログをアーカイブフォルダへ移動 → 自動でZIP圧縮
- フォルダが整理され、容量も節約できる
- ZIPファイルをメール添付やバックアップにそのまま利用可能
✅ まとめ
ZipArchiveLogs→ アーカイブフォルダ内のログを自動でZIP化- Windows標準の圧縮フォルダ機能を利用するので追加ソフト不要
- 実務では「古いログを移動 → ZipArchiveLogsで圧縮」という流れが便利


