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

Excel VBA VBA
スポンサーリンク

今回は 「スケジュールをConfigシートで管理する版」「失敗時のみ通知する版」 を紹介します。


1. スケジュールをConfigシートで管理する版

Configシートに「実行時刻」を記載しておき、その時刻に自動で保存+通知を実行します。
※ Configシートの A1 に時刻(例: 07:30)を記載しておく前提。

Sub ScheduleFromConfig()
    Dim wsConfig As Worksheet
    Dim runTime As String
    
    Set wsConfig = ThisWorkbook.Sheets("Config")
    runTime = wsConfig.Range("A1").Value   ' 実行時刻 (例: 07:30)
    
    ' OnTimeでスケジュール設定
    Application.OnTime TimeValue(runTime), "SaveMergedAndNotifyWithAttachment", , True
    
    MsgBox "スケジュール設定完了: " & runTime
End Sub
VB

これで、Configシートの時刻を変更するだけでスケジュールを柔軟に管理できます。


2. 失敗時のみ通知する版

保存処理や統合処理が失敗した場合のみ、通知メールを送信する例です。

Sub SaveMerged_NotifyOnFailure()
    Dim wsMaster As Worksheet
    Dim newWb As Workbook
    Dim savePath As String, todayStr As String
    Dim toAddr As String
    Dim success As Boolean
    
    Set wsMaster = ThisWorkbook.Sheets("Master")
    
    ' 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")
    success = True
    
    On Error GoTo SaveErr
    
    ' 新しいブックを作成
    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
    
    GoTo EndProc
    
SaveErr:
    success = False
    ' 失敗時のみ通知
    Call SendMailWithAttachment(toAddr, "[CSV統合失敗通知]", _
        "統合結果の保存に失敗しました。" & vbCrLf & _
        "保存先: " & savePath & vbCrLf & _
        "日時: " & todayStr, "")
    
EndProc:
    If success Then
        MsgBox "統合結果を保存しました(通知なし)。"
    Else
        MsgBox "保存に失敗し、通知メールを送信しました。"
    End If
End Sub
VB

✅ まとめ

  • スケジュールConfig管理版 → 実行時刻をシートで管理できるので、運用者が簡単に変更可能。
  • 失敗時のみ通知版 → 成功時は通知不要、失敗時のみメール送信で運用負荷を軽減。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました