CSV一括取り込みの基本
業務でよくあるのが「複数のCSVファイルをまとめてExcelに取り込みたい」というケースです。
初心者向けに、CSV一括取り込みのコード例やテンプレートをかみ砕いて説明します。
基本の考え方
- CSV一括取り込みとは?
指定フォルダ内の複数CSVファイルを順番に読み込み、Excelシートにまとめる処理。 - 用途:
- 日次や月次で出力されるCSVをまとめて集計
- 複数システムからのデータを統合
- 手作業で開いてコピーする手間を削減
テンプレ1:フォルダ内のCSVを順番に取り込み
Sub ImportCSV_Folder()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim fso As Object, folder As Object, file As Object
Dim rowCount As Long
' 取り込み先シート初期化
ws.Cells.Clear
rowCount = 1
' フォルダ選択ダイアログ
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "CSVフォルダを選択してください"
If .Show <> -1 Then Exit Sub
folderPath = .SelectedItems(1)
End With
' FileSystemObjectでフォルダ内のファイルを取得
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Name)) = "csv" Then
' CSVを開いてコピー
Workbooks.Open file.Path
ActiveSheet.UsedRange.Copy ws.Cells(rowCount, 1)
' 行数を更新
rowCount = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
' CSVを閉じる
ActiveWorkbook.Close False
End If
Next file
MsgBox "CSVファイルを一括取り込みしました!"
End Sub
VB- ポイント:
FileDialogでフォルダを選択。FileSystemObjectでファイル一覧を取得。- CSVを順番に開いてコピー。
テンプレ2:CSVを直接読み込む(Openステートメント)
Sub ImportCSV_Direct()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim filePath As String
Dim lineData As String
Dim arr As Variant
Dim rowCount As Long
' ファイル選択ダイアログ
filePath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")
If filePath = "False" Then Exit Sub
rowCount = 1
Open filePath For Input As #1
Do Until EOF(1)
Line Input #1, lineData
arr = Split(lineData, ",")
ws.Cells(rowCount, 1).Resize(1, UBound(arr) + 1).Value = arr
rowCount = rowCount + 1
Loop
Close #1
MsgBox "CSVを読み込みました!"
End Sub
VB- ポイント:
Open ... For Inputでテキストファイルを直接読み込む。Splitでカンマ区切りを配列に変換。- Excelに1行ずつ書き込む。
テンプレ3:複数CSVを一括で直接読み込む
Sub ImportCSV_Multi()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim filePath As Variant
Dim lineData As String
Dim arr As Variant
Dim rowCount As Long
' 複数ファイル選択
filePath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", , "CSVファイル選択", , True)
If IsArray(filePath) = False Then Exit Sub
rowCount = 1
Dim i As Long
For i = LBound(filePath) To UBound(filePath)
Open filePath(i) For Input As #1
Do Until EOF(1)
Line Input #1, lineData
arr = Split(lineData, ",")
ws.Cells(rowCount, 1).Resize(1, UBound(arr) + 1).Value = arr
rowCount = rowCount + 1
Loop
Close #1
Next i
MsgBox "複数CSVを一括で取り込みました!"
End Sub
VB- ポイント:
GetOpenFilenameのMultiSelect=Trueで複数選択可能。- 選んだファイルを順番に読み込む。
例題で練習
'例1:フォルダ内のCSVを順番に取り込み
'例2:1つのCSVを直接読み込む
'例3:複数CSVを一括で直接読み込む
VB初心者向けポイント
- フォルダ単位で取り込むか、ファイル選択するかを決める
- FileSystemObjectを使うとフォルダ内の全CSVを処理できる
- Openステートメント+Splitで直接読み込む方法もある
- 複数ファイル選択で一括処理が可能
- 取り込み先シートを決めておくと整理しやすい
👉 この「CSV一括取り込みテンプレ」を覚えておけば、Excel VBAで 複数CSVファイルを効率的にまとめて取り込む処理 を簡単に作成できます。

