以前の記事に関連することになるが、CSVファイルをシートに読み込む手法としてADOも使えそうなので使ってみることにした。前の記事の手法と速度的なものを比べてみたが、若干こちらの方が遅いけどあまり差異はない。
Function LoadCSV2(ByVal dest As Worksheet, ByVal csvfile As String) As Boolean
Dim fs As Object
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim csvpath As String
Set fs = CreateObject("Scripting.FileSystemObject")
csvpath = fs.GetFile(csvfile).ParentFolder
csvfile = fs.GetFile(csvfile).Name
Set fs = Nothing
Set cn = New ADODB.Connection
cn.Provider = "MSDASQL"
cn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=" & csvpath & ";"
cn.Open
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM " & csvfile, cn
Application.ScreenUpdating = False
dest.UsedRange.Clear
For i = 1 To rs.Fields.Count: dest.Cells(1, i) = rs.Fields(i - 1).Name: Next i
rn = 2
While Not rs.EOF
For i = 1 To rs.Fields.Count: dest.Cells(rn, i) = rs.Fields(i - 1).Value: Next i
rs.MoveNext: rn = rn + 1
Wend
Application.ScreenUpdating = True
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
LoadCSV2 = True
End Function
引数を前の記事のものと同じにしたので、パス名とファイル名を切り出すのにFileSystemObjectなどを使っているため、その辺で若干こちらの方が効率が悪くなっているのかもしれない。引数をパス、ファイル名と分ければ、その部分は要らないので多少は速くなるかも。
テーマ:Excel - ジャンル:コンピュータ
|
| ホーム |
SHOJI's Code



