ADOを使用して、データベーステーブルであるかのようにテキストファイルをクエリできます。これにより、SQLクエリを記述して、テキストファイルからデータを引き出すことができます。必要に応じて、任意のテキストファイルまたは.xlsファイルでこれを行うことができます。
そのためのコード/プロセスはかなり単純です。最初にMicrosoftActiveXData Objects 2.Xライブラリを参照してから、次のようなものを使用する必要があります。
Dim cn as New ADODB.Connection
Dim rs as New ADODB.Recordset
Dim i as Integer
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\SomeFolder;" & _
"Extended Properties=""text; HDR=Yes;FMT=Delimited"""
.Open
With rs
.Open "SELECT * from fileName.txt", cn
'Loop through each row in query
While Not (.EOF Or .BOF)
'Loop through each column in row
For i = 0 to .Fields.Count - 1
Debug.Print .Fields(i).Value 'Print value of field to Immediate Window
Next i
.MoveNext
Wend
.Close
End With
.Close
End With
Set rs = Nothing
Set cn = Nothing
これにより、テキストファイルがループされ、VBAイミディエイトウィンドウの最初の列の値が表示されます。また、ファイルにヘッダー行があることも前提としています。そうでない場合は、ConnectionStringのHDRをNoに変更する必要があります。
コードは自動的にタイプを推測しようとしますが、正しいタイプ(先行ゼロなど)が見つからないという問題が発生した場合は、ファイルのスキーマを明示的に定義できます。スキーマルートに移動すると、 HDRやFMTなどのConnectionString引数が 無視されることに注意することが重要です。スキーマ定義でオーバーライドしない限り、レジストリで定義されているデフォルト設定を保持します。schema.iniファイルの詳細については、http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353(v = vs.85).aspxを参照してください。
別の便利なリンクは次のとおりです:http://msdn.microsoft.com/en-us/library/ms974559.aspx。これはMicrosoftScriptingGuysによって書かれた記事であり、私が最初にプロセスについて学んだ方法です。
最後に、このプロセスを.xlsファイルで使用する場合は、OPEN.xlsファイルをクエリしないでください。OPEN .xlsファイルには厄介なメモリリークのバグがあります(詳細はこちら:http ://support.microsoft.com/default.aspx?scid = kb; en-us; 319998&Product = xlw )。CLOSED .xlsドキュメントをクエリする限り、=Dの問題は発生しません。特定のシートをターゲットにする必要があるため、SQL FROM句の構文は少し異なりますが、リンクしたScriptingGuysの記事IIRCでその方法を説明しています。