今回は 「ログを週単位でまとめる版」 と 「通知メール本文にログサマリを直接埋め込む版」 を紹介します。
1. ログを週単位でまとめる版
ログを記録するときに、日付ではなく 週単位 のシートに振り分けます。
例: Log_2025W47 シートにその週のログをまとめる。
Sub LogResultByWeek(ts As String, path As String, status As String)
Dim wsLog As Worksheet
Dim sheetName As String
Dim nextRow As Long
Dim weekNum As String
' 週番号を算出 (ISO週番号)
weekNum = Format(CDate(ts), "ww") ' VBA標準の週番号
sheetName = "Log_" & Format(CDate(ts), "yyyy") & "W" & weekNum
' シートが存在しなければ作成
On Error Resume Next
Set wsLog = ThisWorkbook.Sheets(sheetName)
If wsLog Is Nothing Then
Set wsLog = ThisWorkbook.Sheets.Add
wsLog.Name = sheetName
wsLog.Range("A1:C1").Value = Array("日時", "保存先", "ステータス")
End If
On Error GoTo 0
' 次の行にログ追加
nextRow = wsLog.Cells(wsLog.Rows.Count, "A").End(xlUp).Row + 1
wsLog.Cells(nextRow, 1).Value = ts
wsLog.Cells(nextRow, 2).Value = path
wsLog.Cells(nextRow, 3).Value = status
End Sub
VB利用例:
Call LogResultByWeek(Now, "C:\Data\Output\MergedResult.xlsx", "SUCCESS")
VB2. 通知メール本文にログサマリを直接埋め込む版
通知メールの本文に、直近のログサマリを埋め込みます。
例: 成功件数・失敗件数を本文に記載。
Sub SaveMergedAndNotifyWithLogSummary()
Dim wsMaster As Worksheet, wsLog As Worksheet
Dim newWb As Workbook
Dim savePath As String, todayStr As String
Dim toAddr As String
Dim lastRow As Long, okCount As Long, ngCount As Long
Set wsMaster = ThisWorkbook.Sheets("Master")
Set wsLog = ThisWorkbook.Sheets("Log")
' Configシートから保存先と宛先を取得
Dim wsConfig As Worksheet
Set wsConfig = ThisWorkbook.Sheets("Config")
savePath = wsConfig.Range("B1").Value
toAddr = wsConfig.Range("B2").Value
todayStr = Format(Now, "yyyy-mm-dd HH:NN:SS")
' 新しいブックを作成して保存
Set newWb = Workbooks.Add
wsMaster.UsedRange.Copy newWb.Sheets(1).Cells(1, 1)
Application.DisplayAlerts = False
newWb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
newWb.Close SaveChanges:=False
' ログサマリ作成
lastRow = wsLog.Cells(wsLog.Rows.Count, "A").End(xlUp).Row
Dim r As Long
For r = 2 To lastRow
If wsLog.Cells(r, 3).Value = "SUCCESS" Then
okCount = okCount + 1
ElseIf wsLog.Cells(r, 3).Value = "FAILURE" Then
ngCount = ngCount + 1
End If
Next r
' 通知メール本文にサマリを埋め込み
Dim bodyText As String
bodyText = "統合結果を保存しました。" & vbCrLf & _
"保存先: " & savePath & vbCrLf & _
"日時: " & todayStr & vbCrLf & vbCrLf & _
"=== ログサマリ ===" & vbCrLf & _
"成功件数: " & okCount & vbCrLf & _
"失敗件数: " & ngCount
Call SendMailWithAttachment(toAddr, "[CSV統合完了通知]", bodyText, "")
MsgBox "統合結果を保存し、ログサマリ付き通知メールを送信しました。"
End Sub
VB✅ まとめ
- 週単位ログ版 → ログを週ごとに整理できるので、週次レポートに便利。
- ログサマリ本文埋め込み版 → メール本文に成功/失敗件数を直接記載できるので、即座に状況把握可能。

