【Step9】VBAでファイルを一括処理!CSVやフォルダ操作の基本

VBA

はじめに

「毎日同じフォルダにあるCSVファイルを開いて集計」「ファイルを1つずつ開いてコピー」…こんな作業、そろそろ自動化しませんか?

今回は、VBAでフォルダ内のファイルを一括処理する方法を紹介します。

CSVファイルの読み込み、保存、ループ処理まで実務に役立つ技を一気に習得しましょう!


◆ できるようになること

  • 指定フォルダ内の全CSVファイルを読み込む
  • 中身を1ファイルにまとめる
  • ファイル名や内容に応じた条件分岐も可能

◆ サンプル構成

以下のようなCSVファイルが1つのフォルダに入っているとします:

  • C:\Test\sales_202401.csv
  • C:\Test\sales_202402.csv
  • C:\Test\sales_202403.csv

この3つを1つのシートにまとめる処理を作っていきます。


◆ コード全文

Sub CSVファイル一括読込()

    Dim myPath As String
    Dim myFile As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim tempWB As Workbook

    ' データをまとめるシートを指定(このブックのSheet1)
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.ClearContents ' 一度内容をクリア

    ' フォルダのパス(必要に応じて変更)
    myPath = "C:\Test\"

    ' CSVファイルを1つずつ読み込む
    myFile = Dir(myPath & "*.csv")

    Do While myFile <> ""

        ' 一時的にCSVを開く
        Set tempWB = Workbooks.Open(Filename:=myPath & myFile)

        ' 転記する最終行を取得
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1

        ' A1からのデータをコピー
        tempWB.Sheets(1).UsedRange.Copy Destination:=ws.Cells(lastRow, 1)

        ' 一時ブックを閉じる(保存しない)
        tempWB.Close SaveChanges:=False

        ' 次のファイルへ
        myFile = Dir

    Loop

    MsgBox "CSVファイルの読み込みが完了しました!", vbInformation

End Sub

◆ コードのポイント

  • Dir関数でフォルダ内のファイルを取得
  • Workbooks.OpenでCSVを一時的に開く
  • UsedRangeで中身をまるごとコピー
  • 1つのシートにデータを追加していく

◆ よくある応用パターン

  • 特定の文字を含むファイルだけ読み込みたい
    If InStr(myFile, "sales") > 0 Then などで条件分岐
  • 読み込んだ日付やファイル名を記録したい
    → コピー後に1列追加してファイル名や日付を入れる

まとめ

フォルダ内のCSVファイルをまとめて処理する技術は、実務に直結する“効率化スキル”です。

今後はファイルの書き出し(Export)や、拡張子別の処理などにも応用できます。

VBAで「ファイルを味方に」して、仕事をもっと楽に、スマートにしていきましょう!


📝 関連記事(予定)

  • 【Step10】実践!ボタン一つで日報を作成するツールを作ろう
  • 【応用編】フォルダ内のExcelファイルを一括検索・加工する方法
タイトルとURLをコピーしました