
VBAでCSVファイルを途中行まで読んだ後で最初の行から読み直す方法を探しています。
【例】aaa.csvというファイルに5行分のデータが入っている。
これを3行目まで読んだ後で、また1行目から読みたい。
【処理対象ファイル】
ファイル名:aaa.csv
ファイルの中身:5行
1,1,1,1
2,2,2,2
3,3,3,3
4,4,4,4
5,5,5,5
【読み込み順イメージ】
1,1,1,1
2,2,2,2
3,3,3,3
1,1,1,1 ←aaa.csvの1行目から読み直し。
2,2,2,2
3,3,3,3
4,4,4,4
5,5,5,5
現在は処理が思いつかなかったので、読みたいファイルを一度閉じてまた開いてという下記のような無駄な動作にしてしまっています。
for xxx=0 to zzz
open #ファイル番号
Do Until EOF(1)
Line Input #1, 変数
1度目に3行目が来たら抜ける
Loop
close #ファイル番号
next xxx
しかし、使用するファイルは数十MB~数百MB、Open/Closeも数千は軽く行うので、さすがにこれでは処理が遅すぎてどうにもならなくて困っています。
どなたか良いお知恵をお貸しください。
No.4
- 回答日時:
「照らし合わせつつ処理」の内容にもよりますが他の手段があります。
aaa.csvの番号とbbb.csvの番号が同じものを取り出す
というものなら、予め番号でソートしておくことで、両方のファイルを先頭から順番に読むだけで照合することができます。
例) aaaの先頭が 2 、bbbの先頭が 5 なら、 bbbには 5より小さい番号は無いので、2がbbbにあるかを調べる必要はありません。
読み進めても、 aaa=2へ戻る必要はありません。
許されるなら、CSVをSQLServer等の大量のデータに耐えられるデータベースに取り込んで、
JOIN で結合したりして、必要なデータだけ抽出してCSVへ。
そのCSVをExcelで処理、とするのがいいように思います。
回答ありがとうございます。
ソートをしておく、というのも一つの手なんですね。
勉強になります。
大容量すぎた場合はSQLServerをかませる方法もあるということも、頭に入れておきます。
ありがとうございました。
No.1
- 回答日時:
全部とりあえず読み込んだ後に3行をコピー&挿入したらダメですか?
回答ありがとうございます。
挿入したい、というわけではなくデータを確認したいのです。
処理を簡略化して書いてしまったのが原因でわかりにくくなってしまい申し訳ございません。
実際はもうひとつファイル(bbb.csv)があり、そのもうひとつのファイルを1行ずつまわしてaaa.csvと照らし合わせつつ処理をする形を取っています。
bbb.csvを1行読んで、それに対するaaa.csvの対象行が見つかったらbbb.csvを一行進めてaaa.csvをまた最初から読み込みたいという状態です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
EXCELのVBAでEOFを誤認識
Visual Basic(VBA)
-
ReadLineでの読み出し行を指定する
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
Do whileでExitせず、ループの最初に戻る方法
その他(Microsoft Office)
-
6
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
7
Excel.VBA テキストファイルを指定行数からの読み込む
Excel(エクセル)
-
8
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
9
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
10
VBでのテキストファイルへ参照の際の指定行への移動
Visual Basic(VBA)
-
11
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
全CSVファイルに一行だけ追加したいのですが
PowerPoint(パワーポイント)
-
14
VBAでCSVの1行目だけを書き換える方法
Excel(エクセル)
-
15
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
16
VBA:Openステートメントで開いたCSVファイルの特定行を削除する方法
その他(プログラミング・Web制作)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
19
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
20
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ADOによるCSVファイルからのデ...
-
MATLAB グローバル変数の宣言
-
VBAで巨大なファイルの途中から...
-
Perlの変数に文字数制限(容量...
-
ReadLineでの読み出し行を指定する
-
openした後、closeしないでプロ...
-
Perlでファイルの列を削除する。
-
JavaでCSVファイルを高速に読む...
-
ListBoxのデータを高速でファイ...
-
open中のファイルをrename
-
複数ファイルを1つにするシェ...
-
FindFirstFileとFindNextFileで...
-
Windowsで複数のファイルを同じ...
-
VB6で"r"みたいな文字が返って...
-
【C++/CLI】ファイルオープンに...
-
Windows漢字フォルダ名の扱い(...
-
C++でのテキストファイル読み込...
-
【エクセル】改行無しテキスト...
-
正規表現で、特定のファイル名...
-
文字コードの変換(Shift-JISか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
MATLAB グローバル変数の宣言
-
openした後、closeしないでプロ...
-
ExcelをCSV書き出す場合のシー...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
VBAで巨大なファイルの途中から...
-
VB6.0でDB接続する際に切断時の...
-
Perlの変数に文字数制限(容量...
-
CSVが可変長の場合の検索方法
-
C言語でのファイルのデータ更...
-
Javaで同一のファイルを読み込...
-
perlで、後ろの行を読んで、前...
-
C#でCSVファイルを逐一更新したい
-
perl内でPHPを動かす?
-
外部サーバーにあるファイルを...
-
ADOによるCSVファイルからのデ...
-
エディットボックスの表示方法...
-
拡張子 ”log” と ” dat” の違い
おすすめ情報