Excel VBA 逆引き集 | CSV一括取り込み

Excel VBA
スポンサーリンク

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
  • ポイント:
    • GetOpenFilenameMultiSelect=True で複数選択可能。
    • 選んだファイルを順番に読み込む。

例題で練習

'例1:フォルダ内のCSVを順番に取り込み
'例2:1つのCSVを直接読み込む
'例3:複数CSVを一括で直接読み込む
VB

初心者向けポイント

  • フォルダ単位で取り込むか、ファイル選択するかを決める
  • FileSystemObjectを使うとフォルダ内の全CSVを処理できる
  • Openステートメント+Splitで直接読み込む方法もある
  • 複数ファイル選択で一括処理が可能
  • 取り込み先シートを決めておくと整理しやすい

👉 この「CSV一括取り込みテンプレ」を覚えておけば、Excel VBAで 複数CSVファイルを効率的にまとめて取り込む処理 を簡単に作成できます。

タイトルとURLをコピーしました