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が文字化けする場合があります。この場合、Open+ADODB.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
✅ エラー対策と注意点
- キャンセル処理を必ず入れる
If filePath <> False Then ...を忘れるとエラーになる。
- 文字化けに注意
- 日本語CSVは文字コードにより化けやすい。Shift-JISとUTF-8の違いを意識。参考:【Excel】既定の文字コードを変更する方法(上級者向け)|UTF-8対応でCSV文字化けを防ぐ
- 大量データはOpen文で処理する
- 10万行以上のCSVはWorkbooks.OpenよりもOpen文の方が高速。
- 保存形式に注意
- CSVを編集後に上書き保存すると列幅や数式は消える。必要ならExcel形式(.xlsx)で保存し直す。
■ まとめ
ExcelVBAでCSVファイルを開く方法は大きく分けて次の3つです。
- Workbooks.Open :シンプルにCSVをブックとして開く
- Application.GetOpenFilename+Workbooks.Open :ユーザー選択型
- Open文で読み込み :高速処理や文字コード対応
さらに、複数ファイルの一括処理やデータ集約、文字コード対応などを組み合わせれば、実務に即した強力な自動化マクロが構築できます。
CSV処理はExcel業務の自動化における必須スキルです。ぜひ本記事を参考に、実務に活かしてみてください。