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

Excel VBA VBA
スポンサーリンク

今回は 「ログを日付ごとに別シートへ自動振り分ける版」「通知メールにログ内容を添付する版」 を紹介します。


1. ログを日付ごとに別シートへ自動振り分ける版

ログを記録するときに、日付ごとに別シートを自動作成して振り分けます。
例: Log_2025-11-20 シートにその日のログを記録。

Sub LogResultByDate(ts As String, path As String, status As String)
    Dim wsLog As Worksheet
    Dim sheetName As String
    Dim nextRow As Long
    
    sheetName = "Log_" & Format(CDate(ts), "yyyy-mm-dd")
    
    ' シートが存在しなければ作成
    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 LogResultByDate(Now, "C:\Data\Output\MergedResult.xlsx", "SUCCESS")
VB

2. 通知メールにログ内容を添付する版

保存完了後に、ログ内容を一時的にCSVファイルに書き出し、それをメールに添付して送信します。

Sub SaveMergedAndNotifyWithLogAttachment()
    Dim wsMaster As Worksheet, wsLog As Worksheet
    Dim newWb As Workbook
    Dim savePath As String, logPath As String, todayStr As String
    Dim toAddr As String
    
    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
    
    ' ログをCSVに書き出し
    logPath = Environ("USERPROFILE") & "\Desktop\LogExport.csv"
    wsLog.Copy
    ActiveWorkbook.SaveAs Filename:=logPath, FileFormat:=xlCSVUTF8
    ActiveWorkbook.Close SaveChanges:=False
    
    ' 通知メール(保存ファイル+ログCSV添付)
    Call SendMailWithAttachment(toAddr, "[CSV統合完了通知]", _
        "統合結果を保存しました。" & vbCrLf & _
        "保存先: " & savePath & vbCrLf & _
        "日時: " & todayStr & vbCrLf & _
        "ログを添付しました。", logPath)
    
    MsgBox "統合結果を保存し、ログ付き通知メールを送信しました。"
End Sub
VB

✅ まとめ

  • 日付ごとに別シート振り分け版 → ログを日別に整理できるので、履歴管理が容易。
  • ログ添付通知版 → 保存結果とログをメールで共有できるので、監視や報告に便利。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました