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

Excel VBA VBA
スポンサーリンク

今回は 「保存形式をConfigシートで指定する版」「世代フォルダ+ファイル名に時刻まで付ける版」 を紹介します。


📝 1. 保存形式をConfigシートで指定する版

Configシートに保存形式(例: XLSX / CSV)を記載しておき、その形式で保存します。
※ Configシートの A1 に保存先フォルダ、A2 に保存形式を記載しておく前提。

Sub SaveMerged_ConfigFormat()
    Dim wsMaster As Worksheet, wsConfig As Worksheet
    Dim newWb As Workbook
    Dim folderPath As String, savePath As String, todayStr As String
    Dim formatStr As String
    
    Set wsMaster = ThisWorkbook.Sheets("Master")
    Set wsConfig = ThisWorkbook.Sheets("Config")
    
    folderPath = wsConfig.Range("A1").Value
    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
    
    formatStr = UCase(wsConfig.Range("A2").Value) ' 保存形式指定 (XLSX/CSV)
    todayStr = Format(Now, "yyyy-mm-dd")
    
    ' 新しいブックを作成
    Set newWb = Workbooks.Add
    wsMaster.UsedRange.Copy newWb.Sheets(1).Cells(1, 1)
    
    Application.DisplayAlerts = False
    Select Case formatStr
        Case "XLSX"
            savePath = folderPath & "MergedResult_" & todayStr & ".xlsx"
            newWb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
        Case "CSV"
            savePath = folderPath & "MergedResult_" & todayStr & ".csv"
            newWb.Sheets(1).SaveAs Filename:=savePath, FileFormat:=xlCSVUTF8
        Case Else
            MsgBox "Configシートの保存形式が不正です。XLSX または CSV を指定してください。"
    End Select
    Application.DisplayAlerts = True
    
    newWb.Close SaveChanges:=False
    
    MsgBox "統合結果を保存しました: " & savePath
End Sub
VB

📝 2. 世代フォルダ+ファイル名に時刻まで付ける版

保存時に「日付ごとの世代フォルダ」を作成し、ファイル名に 時刻まで付与 して保存します。
例: C:\Data\Output\2025-11-20\MergedResult_2025-11-20_1811.xlsx

Sub SaveMerged_GenerationFolderWithTime()
    Dim wsMaster As Worksheet
    Dim newWb As Workbook
    Dim baseFolder As String, genFolder As String, savePath As String
    Dim todayStr As String, timeStr As String
    
    Set wsMaster = ThisWorkbook.Sheets("Master")
    
    ' ベースフォルダ(固定)
    baseFolder = "C:\Data\Output\"
    If Right(baseFolder, 1) <> "\" Then baseFolder = baseFolder & "\"
    
    ' 日付ごとの世代フォルダを作成
    todayStr = Format(Now, "yyyy-mm-dd")
    genFolder = baseFolder & todayStr & "\"
    If Dir(genFolder, vbDirectory) = "" Then MkDir genFolder
    
    ' 時刻文字列(例: 1811)
    timeStr = Format(Now, "HHNN")
    
    savePath = genFolder & "MergedResult_" & todayStr & "_" & timeStr & ".xlsx"
    
    ' 新しいブックを作成
    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
    
    MsgBox "統合結果を保存しました: " & savePath
End Sub
VB

✅ まとめ

  • Configシート指定版 → 保存形式を外部管理できるので、柔軟に変更可能。
  • 世代フォルダ+時刻付き版 → 日付フォルダ+時刻付きファイル名で世代管理が容易。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました