VBA ログ管理テンプレート(一定期間で自動削除版)
業務マクロでログを外部ファイルに出力する場合、古いログファイルを自動削除するとフォルダが整理され、容量も節約できます。ここでは「30日以上前のログファイルを削除する」拡張版を紹介します。
日付ごとログ+古いファイル削除テンプレ
Option Explicit
'=== ログ出力(日付ごとにファイル分割) ===
Sub WriteLogDaily(msg As String)
Dim fso As Object
Dim ts As Object
Dim filePath As String
Dim logFileName As String
' 日付ごとにファイル名を作成
logFileName = "log_" & Format(Date, "yyyymmdd") & ".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 DeleteOldLogs(30) ' 30日以上前を削除
End Sub
'=== 古いログファイル削除 ===
Sub DeleteOldLogs(daysThreshold As Long)
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim logFolderPath As String
logFolderPath = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(logFolderPath)
For Each file In folder.Files
' ファイル名が "log_YYYYMMDD.txt" の形式か確認
If InStr(file.Name, "log_") = 1 And Right(file.Name, 4) = ".txt" Then
' ファイルの日付部分を抽出
Dim fileDate As Date
On Error Resume Next
fileDate = DateSerial( _
Mid(file.Name, 5, 4), _
Mid(file.Name, 9, 2), _
Mid(file.Name, 11, 2))
On Error GoTo 0
' 日付が有効なら削除判定
If IsDate(fileDate) Then
If fileDate < Date - daysThreshold Then
fso.DeleteFile file.Path, True
End If
End If
End If
Next file
End Sub
'=== メイン処理例 ===
Sub MainProcess()
On Error GoTo ErrHandler
WriteLogDaily "処理開始"
' ▼業務処理の例
Range("A1").Value = "Hello VBA!"
WriteLogDaily "処理正常終了"
Exit Sub
ErrHandler:
WriteLogDaily "エラー発生: " & Err.Number & " - " & Err.Description
MsgBox "エラーが発生しました。ログを確認してください。", vbCritical
End Sub
VBこの拡張版のポイント
- 日付ごとにログファイルを作成
→log_YYYYMMDD.txt形式で保存 - 古いログを自動削除
→DeleteOldLogs(30)で「30日以上前」を削除
→ 引数を変えれば「60日」「90日」など自由に設定可能 - 安全設計
→ ファイル名がlog_YYYYMMDD.txtの形式だけを対象にするので、他のファイルは誤削除しない
実務でのメリット
- フォルダが整理され、ログが肥大化しない
- 自動削除なので手作業不要
- 保管期間を柔軟に設定できる
✅ まとめ
- WriteLogDaily → 日付ごとにログを出力
- DeleteOldLogs → 古いログを自動削除
- daysThreshold を変えるだけで保管期間を調整可能


