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

Excel VBA VBA
スポンサーリンク

VBA ログ管理テンプレート(一定期間ごとに自動ZIP圧縮:月初実行版)

Excel VBAには「タスクスケジューラ」のような常駐機能はありませんが、WorkbookイベントやOnTimeメソッドを使うことで「定期的に処理を実行」できます。ここでは「月初にアーカイブフォルダ内のログをZIP圧縮する」サンプルを紹介します。


サンプルコード(Workbookイベント+OnTime)

Option Explicit

'=== 月初にZIP圧縮をスケジュール ===
Private Sub Workbook_Open()
    ' ブックを開いたときに次の月初を予約
    ScheduleZipArchive
End Sub

Sub ScheduleZipArchive()
    Dim nextRun As Date
    
    ' 次の月初(1日午前9時)を計算
    nextRun = DateSerial(Year(Date), Month(Date) + 1, 1) + TimeSerial(9, 0, 0)
    
    ' OnTimeで予約
    Application.OnTime nextRun, "ZipArchiveLogs"
End Sub

'=== 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_" & Format(Date, "yyyymm") & ".zip"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' アーカイブフォルダが存在しない場合は終了
    If Not fso.FolderExists(archivePath) Then Exit Sub
    
    ' 既存ZIPがあれば削除
    If fso.FileExists(zipFilePath) Then fso.DeleteFile zipFilePath
    
    ' 空ZIP作成
    Open zipFilePath For Output As #1
    Print #1, "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
    Close #1
    
    ' ShellでZIPにファイルをコピー
    Dim sh As Object, zipFolder As Object
    Set sh = CreateObject("Shell.Application")
    Set zipFolder = sh.NameSpace(zipFilePath)
    
    Set folder = fso.GetFolder(archivePath)
    For Each file In folder.Files
        zipFolder.CopyHere file.Path
        Application.Wait (Now + TimeValue("0:00:01")) ' コピー待機
    Next file
    
    MsgBox "月初のZIP圧縮が完了しました: " & zipFilePath, vbInformation
    
    ' 次回の月初も予約
    ScheduleZipArchive
End Sub
VB

この仕組みの流れ

  1. Workbook_Openイベント
    → ブックを開いたときに「次の月初」を予約。
  2. Application.OnTime
    → 指定日時に ZipArchiveLogs を自動実行。
  3. ZipArchiveLogs
    → アーカイブフォルダ内のログをZIP圧縮。
    → 処理後に次の月初も再予約。

実務でのメリット

  • 完全自動化 → 月初にログをまとめてZIP化
  • ファイル名に年月を付与ArchiveLogs_202511.zip のように管理しやすい
  • 継続運用 → 毎月自動で繰り返し実行される

✅ まとめ

  • Workbook_Openで「次の月初」を予約
  • OnTimeで自動実行
  • ZipArchiveLogsでアーカイブフォルダをZIP化
タイトルとURLをコピーしました