[[20051101180218]] 『Tab区切りのファイルをシートへ貼り付け』(SY) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Tab区切りのファイルをシートへ貼り付け』(SY)
 いつも参考にしています。
 あるデータを処理するのに以下のサンプルコードを作成して動作確認をしました。
 実行結果は、各データが結合してA列に全て貼り付けられたのですが、
 TABで区切られた(元のデータ)形で貼り付けるにはどこを修正すればよいのでしょう?
 色々調べてみたのですが、煮詰まりました。
 よろしくお願いします。 
 SUB TEST()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim FolderName As String
    Dim DataFile As String

    FolderName = Application.GetOpenFilename("タブ区切りテキストファイル,*.txt")
    If FolderName <> "False" Then
        DataFile = Mid$(FolderName, InStrRev(FolderName, "\") + 1)
        FolderName = Left$(FolderName, (Len(FolderName) - Len(DataFile)))
    Else
        MsgBox "キャンセルされました"
        Exit Sub
    End If
    Set CN = New ADODB.Connection
    With CN
         .Provider = "Microsoft.Jet.OLEDB.4.0"
         .Properties("Data Source").Value = FolderName
         .Properties("Extended Properties").Value = "TEXT;HDR=NO;FMT=Delimited;TAB;"
         .Open
    End With
    Set RS = New ADODB.Recordset
    RS.Open Source:="SELECT * FROM [" & DataFile & "]", ActiveConnection:=CN
    ThisWorkbook.Worksheets("Sheet4").Range("A2").CopyFromRecordset RS
    RS.Close
    CN.Close
    Set RS = Nothing
    Set CN = Nothing
 End Sub


 シートに開いてどうしたいのでしょうか?
 ふつうはタブごとにセルを分けて読み込みますけど・・?
  (INA)

 レスありがとうございます。
 LineInputを使ったものだと処理時間が掛っているので試しにと
 Recordsetオブジェクトを使う処理を考えています。
 (LineInputでは 件数:13000件 項目数:41項目 処理時間:75秒前後)
 処理内容は、ソートさせて、条件に合うデータを抽出して(Vlookupなど使って)、
 最終的にシートにデータを貼り付けるといった内容です。
 sortプロパティがエラーになるので、
 試しにそのまま貼り付けるとタブが詰まった状態でした。
 LineInputのコードも改善する余地は十分にあると思うのですが、
 今回はRecordsetの使い方も覚えたいと考えています。
 TAB区切りのデータではRecordset使えない気がしているのですが、
 よろしくお願いします。
 (SY)

 Excelの「外部データの取り込み」は使えないのでしょうか?

 それならFSOで対応できませんか?
http://www.officetanaka.net/excel/vba/filesystemobject/textstream.htm
  (INA) 

 今回は処理速度の向上を考えシートへの貼り付けは最後にと考えています。
 従って、Excelの「外部データの取り込み」も考えましたが、 今回は除外しました。
 (EXCELの標準関数を使った方が概ね早いという印象はありますが...)
 FileSystemObjectオブジェクトは使ったことが無いので何が出来るか調べてみます。
 アドバイスありがとうございます。
 (SY)

 > ソートさせて、条件に合うデータを抽出
 これは順番が逆ではないですか?
 シート上でソートするのは結構速いですけど。
  (INA)

 そうなんですよ。
 条件に合うデータを抽出してソートしたいところですが、
 抽出条件が難しく、ソートされていないと必要な行が特定出来ないデータなんです。
 イメージとしては、
 001 10 0  A1 A2 A3 ←不要なデータ
 001 20 10 B1 B2 B3 ←必要なデータ(但し、B2,B3でなくA2,A3の情報は必要)
 002 10 0  C1 C2 C3
 : : : : :
 という感じです。
 元のデータのフォーマットは基幹システムで固定なので
 今のところ受け側で何とかするしか手は無い状態です。 
 (SY)

  ADOでタブ区切りテキストを利用・・
http://www.microsoft.com/JAPAN/developer/library/VBCon98/vbcongetdatafromasciifile.htm
  (INA)

 参考になりそうです。
 ありがとうございます。
 (SY)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.