システムメンテナンスのお知らせ

こんばんは。

EXCEL VBAでテキストファイルを読み込む事について質問です。

VBAでテキストファイルをこちらから指定する行数(上から何番目という感じで)からデーターを読み込みたいのですが、どの関数をつかっていいかわからず困っています。
1行ずつ読みこむ「Input Line関数」では、無駄な行まで読み込むので動作が遅くなります。
読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。

ちなみに指定する行数は、ファイルによって違います。
あらかじめ「Input Line関数」で、ある文字が何行目にあるかを探す行為をあらかじめ行っています。

みなさまのアイデアを拝借したく、よろしくお願いします。

gooドクター

A 回答 (2件)

速度は分かりませんが、これとか


http://officetanaka.net/excel/vba/filesystemobje …

あるいは、丸ごと読みこんで、改行コードでSplitして、文字列配列を相手に該当行検索も含めて処理するとか。
昨今のPCでは、相当大きなテキストファイルでもメモリー内で処理できると思います。
http://officetanaka.net/excel/vba/filesystemobje …

テキストファイルの構造によってはADOで処理する案も考えられますが、Recordsetにはファイルの先頭から(あるいは末尾先頭で)入っている事が保証されているのか、ちょっと心配。参考URLはCSVになっていますが、タブ区切りテキストファイル(拡張子.txt)でもいけます。
http://home.att.ne.jp/zeta/gen/excel/c04p47.htm

以上ご参考まで。
    • good
    • 0
この回答へのお礼

mitarashiさん


回答ありがとうございます。
いろいろ試したのですが、私のテクニック不足で回答内容と同様の処理にすることはできませんでした。
しかしそこからヒントを得まして結局、
(1)まずは1行ずつ読む(変数に格納するだけ)
(2)行数をカウントしていき、任意の行数になるまでループします。
(3)任意の行数になったら、書き出すようにする。

上記の処理(1行ずつ読む)でもmitarashiさんの言うとおり、昨今のPCだと思っていたよりも処理が早く終わりました。

まずは、この処理で作っていきたいと思います。
しかし、せっかくアドバイス頂いたのでFSOを勉強して使えるようにします!

朝早くにご回答頂き、誠にありがとうございました。

お礼日時:2012/04/15 23:27

>読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。



であれば、FileSystemObjectを使用し、.SkipLineで飛ばしたい行数分ループさせてみではどうでしょう。
    • good
    • 1
この回答へのお礼

piyo_dansyakuさん

回答ありがとうございます。
回答通りにFSPを駆使してSkipLineでループさせようとしましたが、私のテクニック不足(FSOの理解不足)で、思った通りの処理ができませんでした。
しかし「行数分ループさせる」からヒントを得て、効率が悪いのですが最初から1行ずつ読んで(変数格納のみ)、任意行の時だけ書き出すという処理にしました。
こうすると、処理ができました。
一旦はこの処理で行きたいと思います。

しかし、FSOでSkipLineを駆使すればもっと処理が早くなるのでFSOを勉強してSkipLineを使えるように頑張りたいと思います。

ありがとうございました。

お礼日時:2012/04/15 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング