

No.5ベストアンサー
- 回答日時:
> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。
それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。
だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。
なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。
ありがとうございます。
メモリに関しては問題ないということですね?
データの連続性は特に問題ありません。末尾の調整くらいはしますが。

No.6
- 回答日時:
#2で回答したものです。
案1を採用したい旨の補足がありましたが、
これは、1sheetで100万行分を格納するので、
20sheet使用すると理解しました。
2千万行のデータを1sheetに100万行ずつ格納していくと、
私の環境では、8シートぶんを作成したあたりで、メモリ不足となり、処理が続行できなくなりました。
私の環境は、windows7(64Bit) メモリ12Gバイト excel2007です。
(#2でメモリ4Gバイトと書きましたが、誤りでした。12Gバイトが正しいです)
案1を採用される場合、メモリ不足が発生するかもしれませんので、
簡単なプロトタイプを作成し、2千万行が20sheetに格納できることを
まず確認することをお勧めいたします。
再度ありがとうございます。
100万行を1シートに格納しデータ処理を終えたら、そのデータはクリアし次の100万行を読み込みます。
なのでシートは1枚です。速度アップのため配列に入れて使用すると思うので、実際は未使用です。

No.4
- 回答日時:
まだExcel95の当時に、100万行のログデータを解析しろと言う案件があって、その時はExcelは使わずにgawkで順次処理したっけか…Excelの限界が65535行だったのと、割合順次処理しやすいデータ構造だったためにそうしたんですが。
ところで今回のデータは、最低何行あれば意味をなすんですか?どうしても最低100万行かそれ以上に必要なのか、あるいは1000行くらいあれば良いのか。それによって方針は変わってきませんか?後者ならば、非常識な大きさの配列なりメモリは必要ないから、かなり楽になります。またデータフォーマットにもよるでしょう。カラム数や各カラムに何バイト用意すればよいのか、それもあります。1レコードのデータサイズが大きいと、100万行なんて処理したくてもできないかも知れないので。
No.3
- 回答日時:
No.2の回答では
3はメモリ不足で読み込めないという悲しい現実の前に挫折することを危惧しているのではないだろうか。
自分もそれを考慮に入れて1を勧める。
自分が質問のケースに遭遇したら2度手間にはなるが、エディタでCSVファイルを100万行ずつ分割するかな。
その上でシートに分けるかブックに分けるかを検討する。
・・・しかし、データの量に応じて列を少なくして行を増やすような仕様にならないものか。
16384列もいらないぞ。個人的には500~800列もあれば十分なケースばかりだ。
お礼が大変遅くなりました。
後日談ですが、1を採用しましたがメモリ不足(詳細原因不明)で途中で止まります。Lineなら1行しか見ないのでメモリ不足とは無縁と思ってやって来ましたが、8シート目くらいで力尽きました。で、今は回答頂いたファイル分割しようか思案してるところです。

No.2
- 回答日時:
3がいいと思います。
1を行うと、シートのぶん、余計にメモリを使用します。
但し、3を行うには、十分なメモリを搭載したマシンで行うことが前提になるかと思います。
参考までに、1行約100バイトで2千万行のデータを作成すると約2Gバイトのファイルになります。
このファイルを全て読み込み、内部メモリの配列に格納すると、
私のマシンはWindows7(内部メモリ4Gバイト)ですが、全て読み込むことが
出来ませんでした。
excel2003で実行時、約800万行で停止してしまいました。
老婆心ながら、あなたが3で行われる場合、まず、簡単なプログラム(2千万行を内部メモリに格納するだけのプログラム)を作成し、最後まで読み込むことが出来るかどうかを試されることをお勧めします。
ありがとうございます。
3がダメだった場合(ダメな可能性が大きい)、1ですか?一旦閉じないで開きっぱなしにする理由は、一旦閉じて次回開くとまた1行目から読み込む必要があるからです(そのように聞いてます)。100万行を20回、しかも後半は読込開始行を探す時間が多くなります。
2は分割ファイルを作る所要時間がきになります。
大容量ファイルの読み込みは他にもやってる人は多いと思いますが、皆どうやってるんだろう?
tatsu99さんは結局どんな方法にしたのでしょうか?
No.1
- 回答日時:
具体的に読み込んでどんな処理をしたいかにもよりますが
4.
1行読み込み→処理を繰り返す
シートには結果だけ
5.
別なプログラム(PerlだのRubyだのPythonだので作る)で処理して、結果だけExcelに取り込む
6.
データベースに登録してSQLで集計結果だけをExcelに取り込む
番外
Excelは使わない
等も考えられます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- XML PHP.laravelについて 1 2023/07/06 15:26
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
-
4
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
5
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
6
VBA 大きなtxtテキストファイルを開く方法
Excel(エクセル)
-
7
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
8
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
9
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
10
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
-
11
VBA csvを100万行ずつ各シートに読み込み
Excel(エクセル)
-
12
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
13
EXCEL-VBAにてADOのレコードセットを使用している際のメモリの開放について
Visual Basic(VBA)
-
14
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
15
「VBScript」ADODB.Streamにおけるファイル読み込みについて(他
Microsoft ASP
-
16
エクセルで数式の答えを数値として参照したい
その他(Microsoft Office)
-
17
Excel 1セル当りの文字数が255文字を超える場合のADOからの取
その他(プログラミング・Web制作)
-
18
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
19
(VBS) テキストファイル読込での改行コード
その他(プログラミング・Web制作)
-
20
QGISの使い方について(ポリゴン内点の値の合計)
オープンソース
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数の容量を知るには?
-
ファイルをダウンロードして展...
-
エラー:ストリームの終わりを...
-
バッファとは何ですか
-
BMP画像の画像データ本体をテキ...
-
シリアルポートにデータを送る...
-
C++得意な方!
-
Microsoft VBAで2GBを超えるフ...
-
RS-232Cで接続したPC間のファイ...
-
【Teraterm】filewritelnについて
-
なぜデータの整合性を確認する...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
EOF
-
削除したファイルの復旧、およ...
-
デバイスファイルに書き込むこと
-
クリップボードからファイル名...
-
24ビットのWaveデータの中身に...
-
C言語の質問です。バイナリ形...
-
【python】Excelファイルを読み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
ページ読み込み時に自動的にsub...
-
EOF
-
エクセルVBA 2千万行のCSVファ...
-
入力ファイルをバイナリにする利点
-
【Teraterm】filewritelnについて
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
FTPでエクセルをPUTするとファ...
-
テキストデータをSQLServerに取...
-
C言語とシリアル通信の送受信...
-
ビットマップファイル生成(C言...
-
pcxファイルを開きたい(RGBデ...
-
FTPを使わないファイルアップロ...
-
MacからWinにファイルを添付す...
-
HDDのバイナリイメージの取得方...
おすすめ情報
1行ずつ読み込んで処理後にもう一行、は考えてません。1シート分のデータが揃って初めて処理が可能だからです。
ソフトはエクセルVBAのみ考えてます。Perl, Rubyなど別プログラムは来世で考えます。
「データベースに登録」と言われてもピンと来ないので、SQL等はたぶん無理です。
現状で100万行の読み込みは可能です。配列に読み込むにしても2000万行は無理っぽいけど100万行は大丈夫だと思います。
懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。特に問題ないなら、案1で行きます。