見出し行のないテキストファイルを読み込む
1行目がフィールド見出しではなく、いきなりデータが記述してあるテキストファイルを読み込む場合、schema.iniファイルを利用する時は「ColNameHeader=False」を設定するが、Connectionオブジェクトを開く際に次のような接続文字列を使っても良い。
Connectionオブジェクトの「Extended Properties」に「HDR=NO」を設定する。
ただし、schema.iniファイルに「ColNameHeader=True」が指定されている場合は、schema.iniの設定が優先される。
With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties") = "TEXT;HDR=NO" .Open myFolder End With
HDR設定 | テキストファイルの見出し | shema.ini の ColNameHeader |
---|---|---|
なし | あり | True |
False | ||
shema.ini ファイルなし | ||
HDR=NO | なし | True |
False | ||
shema.ini ファイルなし |
結果としては、schema.iniファイルにフィールド定義情報がある場合は、そちらが優先される。
HDR=NO の設定がある場合、先頭行もデータとして取り込まれる。
ただし、「Excelブックの操作 1行目もデータとして取り込む」にも解説があるように、以下の現象が発生する。
フィールドデータが文字列型以外の場合には、空欄として転記される。
(そのフィールドのデータ型として整合性がとれないため。)
「HDR=NO」の設定は、あくまでも「1行目もデータとして扱いたい場合」だけの設定である。
Sub テキストファイルを読み込む_HDR設定による変化() Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset Dim myFolder As String, myTxt(1 To 6) As String Dim i As Integer, IdxRow As Integer 'テキストファイルの格納されている接続先のフォルダ myFolder = ThisWorkbook.Path & "\txt" '読み込みたいテキストファイル myTxt(1) = "Test1-見出しあり_True.csv" myTxt(2) = "Test2-見出しあり_False.csv" myTxt(3) = "Test3-見出しあり_Non.csv" myTxt(4) = "Test4-見出しなし_True.csv" myTxt(5) = "Test5-見出しなし_False.csv" myTxt(6) = "Test6-見出しなし_Non.csv" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties") = "TEXT" .Open myFolder End With '見出しを設定 Range("A1") = "HDR設定なし" Range("A1:B1").Interior.ColorIndex = 49 Range("A1").Font.ColorIndex = 2 '各ファイルの出力位置 IdxRow = 2 For i = 1 To 6 '見出しを設定 Range("A" & IdxRow) = myTxt(i) Range("A" & IdxRow & ":C" & IdxRow).Interior.ColorIndex = 35 'Recordsetオブジェクトに各テキストファイルの内容を格納 myRS.Open myTxt(i), myCon, Options:=adCmdTableDirect 'セルに転記 Range("A" & IdxRow + 1).CopyFromRecordset myRS 'レコードセットを一度閉じる myRS.Close '出力位置を変更 IdxRow = IdxRow + 10 Next '一度コネクションオブジェクトを閉じる myCon.Close 'HDR=NO で再接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties") = "TEXT;HDR=NO" .Open myFolder End With '見出しを設定 Range("G1") = "HDR=NO" Range("G1:H1").Interior.ColorIndex = 49 Range("G1").Font.ColorIndex = 2 '各ファイルの出力位置を初期化 IdxRow = 2 For i = 1 To 6 '見出しを設定 Range("G" & IdxRow) = myTxt(i) Range("G" & IdxRow & ":I" & IdxRow).Interior.ColorIndex = 35 'Recordsetオブジェクトに各テキストファイルの内容を格納 myRS.Open myTxt(i), myCon, Options:=adCmdTableDirect 'セルに転記 Range("G" & IdxRow + 1).CopyFromRecordset myRS 'レコードセットを一度閉じる myRS.Close '出力位置を変更 IdxRow = IdxRow + 10 Next Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
実行結果 (テキストファイルに見出しあり)
実行結果 (テキストファイルに見出しなし)