見出し行のないテキストファイルを読み込む
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
実行結果 (テキストファイルに見出しあり)
実行結果 (テキストファイルに見出しなし)

