Excel VBA | フォルダ内の全 CSV を 1 枚の Excel に統合するテンプレート

Excel VBA VBA
スポンサーリンク

今回は 「ログを週単位でまとめる版」「通知メール本文にログサマリを直接埋め込む版」 を紹介します。


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")
VB

2. 通知メール本文にログサマリを直接埋め込む版

通知メールの本文に、直近のログサマリを埋め込みます。
例: 成功件数・失敗件数を本文に記載。

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

✅ まとめ

  • 週単位ログ版 → ログを週ごとに整理できるので、週次レポートに便利。
  • ログサマリ本文埋め込み版 → メール本文に成功/失敗件数を直接記載できるので、即座に状況把握可能。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました