以下の手順を使用して、テキストファイルからADOレコードセットを取得し、結果をワークシートに入力できます。

Sub GetTextFileData(strSQL As String, strFolder As String, rngTargetCell As Range)

' example: GetTextFileData "SELECT * FROM filename.txt", _

"C:\FolderName", Range("A3")

' example: GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _

"C:\FolderName", Range("A3")

Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer

If rngTargetCell Is Nothing Then Exit Sub

Set cn = New ADODB.Connection

On Error Resume Next

cn.Open "Driver={Microsoft Text Driver (.txt; .csv)};" & _

"Dbq=" & strFolder & ";" & _

"Extensions=asc,csv,tab,txt;"

On Error GoTo 0

If cn.State <> adStateOpen Then Exit Sub

Set rs = New ADODB.Recordset

On Error Resume Next

rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText

On Error GoTo 0

If rs.State <> adStateOpen Then

cn.Close

Set cn = Nothing

Exit Sub

End If

' the field headings

For f = 0 To rs.Fields.Count - 1

rngTargetCell.Offset(0, f).Formula = rs.Fields(f).Name

Next f

rngTargetCell.Offset(1, 0).CopyFromRecordset rs ' works in Excel 2000 or later

'RS2WS rs, rngTargetCell ' works in Excel 97 or earlier

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

End Sub

手順は次のように使用できます:

Sub TestGetTextFileData()

Application.ScreenUpdating = False

Workbooks.Add

GetTextFileData "SELECT * FROM filename.txt", "C:\FolderName", Range("A3")

'    GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _

"C:\FolderName", Range("A3")

Columns("A:IV").AutoFit

ActiveWorkbook.Saved = True

End Sub

filename.txtを、データを取得するテキストファイルの名前に置き換えます。

C:\ FolderNameを、テキストファイルが保存されているフォルダーの名前に置き換えます。

テキストファイルの最初の行は、列見出し/フィールド名として使用されます。

datwaを含む各列は、コントロールパネルの地域設定で使用されるリスト区切り文字で区切る必要があります。ノルウェーでは、これは通常セミコロン(;)ですが、他の国ではコンマ(、)にすることができます。

このリンクをクリックすると、手順RS2WSが見つかります。

マクロの例では、VBAプロジェクトがADOオブジェクトライブラリへの参照を追加していることを前提としています。

これを行うには、VBE内から、[ツール]、[参照]メニューを選択し、[Microsoft ActiveXデータオブジェクトx.xオブジェクトライブラリ]を選択します。