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
出力
補足
コメントアウトしている.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