はじめに
「毎日同じフォルダにある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ファイルを一括検索・加工する方法


