Excel VBA | 実務用 VBA コード集(テンプレ付き)

Excel VBA VBA
スポンサーリンク

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で圧縮」という流れが便利
タイトルとURLをコピーしました