Microsoft ExcelでVBAを使用してテキストファイル(ADO)からデータをインポート
以下の手順を使用して、テキストファイルから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オブジェクトライブラリ]を選択します。