SHOJI's Code
仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++,JavaScript等)、その他雑記。
アクセスアップ・SEO対策・検索エンジン登録
2008.07<<12345678910111213141516171819202122232425262728293031>>2008.09
ADOを使ってCSVファイルをシートに読みこみ (EXCEL VBA)
以前の記事に関連することになるが、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 - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て