VBAでテキストファイルを読み込むときです。
普通はFSOかLineなんちゃらを使います。
データ抽出にSQL文を使いたくなったらADO接続の出番です。
(SQL知ってれば)抽出や並び替えを簡単に行えます。
また、意外な盲点でしたがデータ内部に
改行コードが含まれてるときにも便利です。
以下のようなデータを想定
[LF]が改行コードだと思って下さい。
“ID”,“名前”,“本文”[LF]
“001”,“なずな”,“こんにちわ。[LF]今日は雨です。”[LF]
“002”,“なずな2”,“こんにちわ2。[LF]今日は雨です2。”[LF]
行の終わりだけではなく、データの中にも
入ってしまっているということですな。
コードはこちら
Sub AdoTxt() Dim Con As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim path As String Dim sql path = ThisWorkbook.path & "\" Filename = "test.txt" Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" _ & path & ";" _ & "ReadOnly=0;" Con.Open sql = "SELECT * FROM " & Filename '絞込 'sql = "select * from " & Filename & " where id = '001'" Rs.Open sql, Con, adOpenKeyset, adLockPessimistic Debug.Print Rs.RecordCount Do Until Rs.EOF Debug.Print Rs.Fields(0); Rs.Fields("名前"); Rs.Fields(2) Rs.MoveNext Loop End Sub
注意点として以下。
Microsoft ActivS Data Object … を参照設定してね
追加はReadOnly=1にすれば可能。更新、削除は不可。
速度自体はあんまり早くない。
Rs.Open のとこのおまじないはレコード数の取得に必要
エディタで対象テキストを開いているとロックでエラーになる。
こんなかんじです。
Rsのレコードセット取得できれば、イメージとしては
テキストストリームです。
おおむね同じ方法でAccessファイルへも接続できます。
こっちは更新、削除も当然可能です。
同時処理もわりとできるのでExcelの共有ブックに困ったときの
回避手段のひとつです。
これはまたこんど!