VBA ログ管理テンプレート(月ごとログ+古い月を自動アーカイブ)
業務マクロでログを月ごとにまとめる場合、古い月のログを自動アーカイブ(ZIP化や別フォルダ移動)すると管理がさらに楽になります。ここでは「log_YYYYMM.txt」を月ごとに作成し、一定期間経過したらアーカイブフォルダへ移動する拡張版を紹介します。
月ごとログ+古いログを別フォルダへ移動
Option Explicit
'=== ログ出力(月ごとにファイル分割) ===
Sub WriteLogMonthly(msg As String)
Dim fso As Object
Dim ts As Object
Dim filePath As String
Dim logFileName As String
' 月ごとにファイル名を作成(例:log_202511.txt)
logFileName = "log_" & Format(Date, "yyyymm") & ".txt"
filePath = ThisWorkbook.Path & "\" & logFileName
' FileSystemObjectを使って追記
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(filePath, 8, True) ' 8=追記モード, True=新規作成可
ts.WriteLine Format(Now, "yyyy/mm/dd hh:nn:ss") & " - " & msg
ts.Close
' 古いログをアーカイブ
Call ArchiveOldLogs(3) ' 3か月以上前のログを移動
End Sub
'=== 古いログをアーカイブフォルダへ移動 ===
Sub ArchiveOldLogs(monthThreshold As Long)
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim archivePath As String
Dim logFolderPath As String
logFolderPath = ThisWorkbook.Path
archivePath = logFolderPath & "\Archive"
Set fso = CreateObject("Scripting.FileSystemObject")
' アーカイブフォルダがなければ作成
If Not fso.FolderExists(archivePath) Then
fso.CreateFolder archivePath
End If
Set folder = fso.GetFolder(logFolderPath)
For Each file In folder.Files
' ファイル名が "log_YYYYMM.txt" の形式か確認
If InStr(file.Name, "log_") = 1 And Right(file.Name, 4) = ".txt" Then
Dim fileYear As Integer, fileMonth As Integer
On Error Resume Next
fileYear = CInt(Mid(file.Name, 5, 4))
fileMonth = CInt(Mid(file.Name, 9, 2))
On Error GoTo 0
If fileYear > 0 And fileMonth > 0 Then
Dim fileDate As Date
fileDate = DateSerial(fileYear, fileMonth, 1)
' 指定月数より古い場合はアーカイブへ移動
If DateDiff("m", fileDate, Date) >= monthThreshold Then
fso.MoveFile file.Path, archivePath & "\" & file.Name
End If
End If
End If
Next file
End Sub
'=== メイン処理例 ===
Sub MainProcess()
On Error GoTo ErrHandler
WriteLogMonthly "処理開始"
' ▼業務処理の例
Range("A1").Value = "Hello VBA!"
WriteLogMonthly "処理正常終了"
Exit Sub
ErrHandler:
WriteLogMonthly "エラー発生: " & Err.Number & " - " & Err.Description
MsgBox "エラーが発生しました。ログを確認してください。", vbCritical
End Sub
VBZIP化したい場合(Windows標準のZIP機能を利用)
VBA単体ではZIP圧縮は直接できませんが、Windowsの「圧縮フォルダ」機能を呼び出すことで可能です。
ただし、実務では「古いログをアーカイブフォルダへ移動」→「外部ツールやバッチでZIP化」する運用が現実的です。
実務でのメリット
- 月ごとにログがまとまる → ファイル数が減り管理が楽
- 古いログは自動でアーカイブフォルダへ移動 → フォルダが整理される
- 保管期間を柔軟に設定可能 →
ArchiveOldLogs(3)を変更すれば「6か月」「12か月」などに対応
✅ まとめ
WriteLogMonthly→ 月ごとにログを出力ArchiveOldLogs→ 古い月のログを自動でアーカイブフォルダへ移動- ZIP化は外部ツール連携が現実的


