Categories: excel

VBAでCSVファイルを読み込む方法|基本から応用まで徹底解説

CSVファイルはデータのやり取りや保存に広く使われており、Excelでもよく利用される形式のひとつです。手動でインポートすることも可能ですが、業務で大量のファイルを処理する際には、自動化できると大きな時間短縮になります。
そこで今回は、Excel VBAを使ってCSVファイルを読み込む方法を基本から応用まで詳しく解説します。初学者の方にもわかりやすいように、実際のコード例を交えながら丁寧に説明していきます。


VBAでCSVを読み込むとは?

VBA(Visual Basic for Applications)とは、ExcelなどのOffice製品に組み込まれているマクロ言語です。
CSVファイルは「Comma Separated Values」の略で、カンマで区切られたテキストデータです。たとえば以下のような内容です:

名前,年齢,住所
田中太郎,30,東京都
山田花子,28,大阪府

VBAを使えば、こうしたCSVファイルを自動でExcelに読み込むことができます。VBAで読み込む方法には複数のやり方がありますが、主に以下の方法があります:

  • Workbooks.Open を使う方法(簡単)
  • Openステートメント を使って1行ずつ読み込む方法(柔軟)
  • QueryTables を使う方法(高度)

それぞれ順番に見ていきましょう。


方法①:Workbooks.OpenでCSVを開く(最も簡単な方法)

まずは最もシンプルな方法です。CSVファイルはExcelでもそのまま開けるので、VBAでも同様に Workbooks.Open を使って開くことができます。

Sub OpenCSV()
Dim csvPath As String
csvPath = "C:\Users\user\Desktop\data.csv" ' CSVファイルのパスを指定

Workbooks.Open Filename:=csvPath
End Sub

この方法の特徴:

  • 【メリット】コードが簡単で実装しやすい
  • 【デメリット】既存のブックとは別ブックとして開かれるため、コピーなどの処理が必要になる

方法②:Openステートメントで1行ずつ読み込む(柔軟な制御)

より細かくデータをコントロールしたい場合には、Open ステートメントを使ってCSVファイルを1行ずつ読み込む方法がおすすめです。

Sub ReadCSV()
Dim csvPath As String
Dim lineData As String
Dim row As Long
Dim items As Variant

csvPath = "C:\Users\user\Desktop\data.csv"
row = 1

Open csvPath For Input As #1
Do Until EOF(1)
Line Input #1, lineData
items = Split(lineData, ",")

Dim col As Integer
For col = 0 To UBound(items)
Cells(row, col + 1).Value = items(col)
Next col

row = row + 1
Loop
Close #1
End Sub

この方法の特徴:

  • 【メリット】好きなシートに直接データを挿入できる、加工も可能
  • 【デメリット】若干コードが長くなる

方法③:QueryTablesを使ってCSVを読み込む(高度な方法)

QueryTablesは、外部データのインポートに使える機能です。CSV読み込みにも利用できます。

Sub ImportCSVwithQueryTable()
Dim ws As Worksheet
Dim qt As QueryTable
Dim csvPath As String

csvPath = "C:\Users\user\Desktop\data.csv"
Set ws = ThisWorkbook.Sheets(1)

Set qt = ws.QueryTables.Add(Connection:="TEXT;" & csvPath, Destination:=ws.Range("A1"))
With qt
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFilePlatform = xlWindows
.TextFileParseType = xlDelimited
.Refresh
End With
End Sub

この方法の特徴:

  • 【メリット】設定が細かく行える。CSV以外の外部データにも応用可能
  • 【デメリット】やや複雑。失敗時のエラー処理が必要

CSVファイルの読み込みで注意するポイント

エンコーディング(文字コード)に注意

VBAではShift-JISが標準ですが、CSVがUTF-8で保存されている場合、文字化けすることがあります。UTF-8対応が必要な場合はADODBやFSOでの読み込みを検討するとよいでしょう。

ファイルパスの取得をダイアログで行いたい場合

ユーザーにファイルを選んでもらう場合は以下のようにします:

Sub SelectAndOpenCSV()
Dim filePath As String
filePath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")

If filePath <> "False" Then
Workbooks.Open Filename:=filePath
End If
End Sub

読み込み先のセル位置や上書きに注意

既存データを消さないよう、読み込み位置や上書き処理には十分注意しましょう。


応用:複数のCSVファイルを一括読み込みする

業務では、1ファイルだけでなく複数のCSVファイルを一括で処理したい場面もあります。以下は指定フォルダ内のCSVをすべて読み込んで、シートごとに分けて読み込む例です。

Sub ImportAllCSVs()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim i As Integer

folderPath = "C:\Users\user\Desktop\CSVフォルダ\"
fileName = Dir(folderPath & "*.csv")
i = 1

Do While fileName <> ""
Set wb = Workbooks.Open(folderPath & fileName)
wb.Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
wb.Close False
fileName = Dir
i = i + 1
Loop
End Sub

まとめ:用途に応じた方法を選ぶのがポイント

方法難易度特徴
Workbooks.Open★☆☆簡単で実装しやすい
Openステートメント★★☆柔軟な読み込みが可能
QueryTables★★★詳細設定ができ、応用が広い

読み込むCSVの内容や業務フローに合わせて、最適な方法を選びましょう。特に日常的にCSVを扱う場合、自動化しておくだけで作業効率が飛躍的に向上します。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。