VBAでCSVファイルを読み込む

こんてんつ

VBAで.csvファイルを読み込む方法を紹介する。

例題

下記の様な.csvファイルがあるとする。

# iris.csv

Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa
4.6,3.4,1.4,0.3,setosa
5,3.4,1.5,0.2,setosa
4.4,2.9,1.4,0.2,setosa
4.9,3.1,1.5,0.1,setosa
5.4,3.7,1.5,0.2,setosa
4.8,3.4,1.6,0.2,setosa
4.8,3,1.4,0.1,setosa
…

参考までに.csvファイルは下記の記事で作成したもの。 contents-open.hatenablog.com

単純な読み込み

コード

Sub Macro1()

inputFileName = "iris.csv"

Dim filePath As String, connection As String
Dim qt As QueryTable
connection = "TEXT;" & ThisWorkbook.Path & "\" & inputFileName
Set qt = ActiveSheet.QueryTables.Add(connection:=connection, Destination:=Range("A1"))

'Dim dataTypes As Variant
'dataTypes = Array(1, 1, 1, 1, 2)

With qt
    .TextFilePlatform = 65001
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
   '.TextFileColumnDataTypes = dataTypes
    .Refresh BackgroundQuery:=False
    .Delete
End With

End Sub

出力

f:id:norunblog:20210911211234p:plain

補足

コメントアウトしている.TextFileColumnDataTypes =によって、読み込んだ時の書式を設定できる。デフォルトだと自動判定(数値?)で読み込まれている。例えばArrayの中の数値を2にすれば文字列として読み込む。

関数にして読み込む

コード

Sub Macro2()

readCSV ("iris.csv")

End Sub

'以下自作のreadCSV関数

Function readCSV(argInputFileName As String)

Dim filePath As String, connection As String
Dim qt As QueryTable
connection = "TEXT;" & ThisWorkbook.Path & "\" & argInputFileName
Set qt = ActiveSheet.QueryTables.Add(connection:=connection, Destination:=Range("A1"))

'Dim dataTypes As Variant
'dataTypes = Array(1, 1, 1, 1, 2)

With qt
    .TextFilePlatform = 65001
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
   '.TextFileColumnDataTypes = dataTypes
    .Refresh BackgroundQuery:=False
    .Delete
End With

End Function