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

Excel VBA VBA
スポンサーリンク

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 を変えるだけで保管期間を調整可能
タイトルとURLをコピーしました