CSVファイル操作 VBAで自動化 VBA一覧 ファイル・印刷操作

【VBA】CSVファイルを開く方法|基礎から実務応用まで徹底解説

Excel業務ではCSVファイルを扱うシーンが非常に多くあります。売上データ、システム出力結果、顧客リストなど、さまざまなデータがCSV形式で提供されるため、ExcelVBAで自動的にCSVファイルを開く処理を作ることで業務効率を大幅に改善できます。

この記事では「vba ファイルを開く csv」というテーマで、初心者にも分かりやすく以下を解説していきます。

✅ CSVファイルとは?Excelでの特徴
✅ Workbooks.Openを使った基本的なCSVファイルの開き方
✅ Application.GetOpenFilenameでファイルを選択して開く方法
✅ Open文を使ってCSVを読み込む方法(高速処理向け)
✅ 複数CSVを一括で開くマクロの作成方法
✅ 実務で役立つサンプルコード(結合・整形・保存)
✅ エラー対策・文字化け回避のポイント

✅ CSVファイルとは?

CSV(Comma Separated Values)は、カンマで区切られたテキスト形式のファイルです。Excelでダブルクリックすれば通常のワークブックのように表示されますが、本質的にはテキストファイルであり、次の特徴があります。

  • 拡張子は .csv
  • 区切り文字はカンマ(場合によってタブやセミコロンもあり)
  • 文字コードによっては日本語が文字化けする(Shift-JIS, UTF-8など)
  • Excelで開くと自動的にセルに分割して表示される

参考:Excel VBAでCSVデータを簡単に読み取り・保存する方法


✅ Workbooks.OpenでCSVを開く(基本)

最もシンプルな方法は Workbooks.Open を使う方法です。

Sub OpenCSV()
    Workbooks.Open "C:\Users\UserName\Documents\sample.csv"
End Sub

・ポイント

  • フルパスを指定する必要があります。
  • Excelが自動で区切りを認識し、シートに展開されます。

✅ ファイル選択ダイアログからCSVを開く

毎回パスをコードに書くのは非効率なので、ユーザーが選んだCSVを開けるようにするのが便利です。

Sub SelectAndOpenCSV()
    Dim filePath As Variant
    
    filePath = Application.GetOpenFilename("CSVファイル,*.csv", , "開くCSVファイルを選択してください")
    
    If filePath <> False Then
        Workbooks.Open filePath
    Else
        MsgBox "キャンセルされました"
    End If
End Sub

これにより、ユーザーが自由にCSVファイルを選んで開けるようになります。

参考:【VBA】テキストファイルを開く方法|読み込み・活用まで一括解説


✅ Open文を使ってCSVを読み込む(高速処理向け)

CSVをExcelで開かず、中身を読み取ってシートに書き込む方法もあります。大量データの処理や自動整形を行いたい場合に有効です。

Sub ReadCSV()
    Dim filePath As String
    Dim fNum As Integer
    Dim lineData As String
    Dim rowNum As Long
    
    filePath = "C:\Users\UserName\Documents\sample.csv"
    fNum = FreeFile
    
    Open filePath For Input As #fNum
    rowNum = 1
    
    Do Until EOF(fNum)
        Line Input #fNum, lineData
        Cells(rowNum, 1).Value = lineData
        rowNum = rowNum + 1
    Loop
    
    Close #fNum
End Sub

・特徴

  • CSVをExcelブックとして開くのではなく、テキストファイルとして読み込む
  • 区切りの処理(Split関数)を組み合わせれば列ごとに分割可能。

✅ 複数CSVを一括で開く

フォルダにある複数のCSVをまとめて開きたいケースでは、Dir 関数を使って処理します。

Sub OpenMultipleCSV()
    Dim filePath As String
    Dim folderPath As String
    
    folderPath = "C:\Users\UserName\Documents\CSV\"
    filePath = Dir(folderPath & "*.csv")
    
    Do While filePath <> ""
        Workbooks.Open folderPath & filePath
        filePath = Dir()
    Loop
End Sub

この方法で、指定フォルダ内の全CSVを順番に開けます。


✅ 実務で役立つ応用サンプル

・ 例1:複数CSVを開いて集約シートにコピー

Sub MergeCSV()
    Dim filePath As String
    Dim folderPath As String
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim lastRow As Long
    Dim pasteRow As Long
    
    Set ws = ThisWorkbook.Sheets("集計")
    pasteRow = 1
    
    folderPath = "C:\Users\UserName\Documents\CSV\"
    filePath = Dir(folderPath & "*.csv")
    
    Do While filePath <> ""
        Set wb = Workbooks.Open(folderPath & filePath)
        
        lastRow = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
        wb.Sheets(1).Range("A1:A" & lastRow).Copy ws.Cells(pasteRow, 1)
        pasteRow = pasteRow + lastRow
        
        wb.Close SaveChanges:=False
        filePath = Dir()
    Loop
End Sub

・ 例2:Shift-JIS以外のCSVを文字化けせずに開く

Excel標準ではUTF-8 CSVが文字化けする場合があります。この場合、OpenADODB.Stream で読み込む方法があります。

Sub OpenUTF8CSV()
    Dim stream As Object
    Dim text As String
    Dim lines As Variant
    Dim i As Long
    
    Set stream = CreateObject("ADODB.Stream")
    stream.Charset = "UTF-8"
    stream.Open
    stream.LoadFromFile "C:\Users\UserName\Documents\utf8.csv"
    
    text = stream.ReadText
    stream.Close
    
    lines = Split(text, vbCrLf)
    
    For i = LBound(lines) To UBound(lines)
        Cells(i + 1, 1).Value = lines(i)
    Next i
End Sub

✅ エラー対策と注意点

  1. キャンセル処理を必ず入れる
    • If filePath <> False Then ... を忘れるとエラーになる。
  2. 文字化けに注意
  3. 大量データはOpen文で処理する
    • 10万行以上のCSVはWorkbooks.OpenよりもOpen文の方が高速。
  4. 保存形式に注意
    • CSVを編集後に上書き保存すると列幅や数式は消える。必要ならExcel形式(.xlsx)で保存し直す。

■ まとめ

ExcelVBAでCSVファイルを開く方法は大きく分けて次の3つです。

  • Workbooks.Open :シンプルにCSVをブックとして開く
  • Application.GetOpenFilename+Workbooks.Open :ユーザー選択型
  • Open文で読み込み :高速処理や文字コード対応

さらに、複数ファイルの一括処理やデータ集約、文字コード対応などを組み合わせれば、実務に即した強力な自動化マクロが構築できます。

CSV処理はExcel業務の自動化における必須スキルです。ぜひ本記事を参考に、実務に活かしてみてください。

    -CSVファイル操作, VBAで自動化, VBA一覧, ファイル・印刷操作