

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)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
-
4
VBA 大きなtxtテキストファイルを開く方法
Excel(エクセル)
-
5
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
6
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
7
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
8
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
-
9
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
10
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
11
100万件越えCSVから条件を満たす行のみ抽出し、編集してエクセルシートに出力するには?
Ruby
-
12
「VBScript」ADODB.Streamにおけるファイル読み込みについて(他
Microsoft ASP
-
13
VBA csvを100万行ずつ各シートに読み込み
Excel(エクセル)
-
14
【Excel VBA】取り込んだファイルのファイル名を取得するには?
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
vbaのエラー対応(実行時エラー7:メモリが不足しています)
Visual Basic(VBA)
-
17
Refreshで落ちる
Visual Basic(VBA)
-
18
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
-
19
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
20
EXCEL-VBAにてADOのレコードセットを使用している際のメモリの開放について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
BMP画像の画像データ本体をテキ...
-
C言語でBMPファイルの内容を表...
-
JPGのwidhtとheight
-
BMP 仕様
-
この方法でバイナリデータが読...
-
読み込んだファイル
-
エクセルVBA 2千万行のCSVファ...
-
EOF
-
Javaでのエンディアン変換
-
バイナリファイル(画像等)デ...
-
ビットマップの画像処理につい...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
ファイル名の先頭にアンダース...
-
dataファイルをxtxファイルにす...
-
Access クエリ実行が急に非常に...
-
ExcelVBAでカレントディレクト...
-
パラメータが正しくありません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
エラー:ストリームの終わりを...
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
EXCEL VBAで、バイナリデータの...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
EOF
-
テキストデータをSQLServerに取...
-
PHPのfgetcsvの処理容量について
-
なぜデータの整合性を確認する...
-
【MFC】CFileでSeekした位置か...
-
C++ Builderにおける画像データ...
-
入力ファイルをバイナリにする利点
-
バイナリファイルの検索について
-
バイナリーデータの一部データ...
-
htmlのデータをwebページみたい...
-
Javaでのエンディアン変換
おすすめ情報
1行ずつ読み込んで処理後にもう一行、は考えてません。1シート分のデータが揃って初めて処理が可能だからです。
ソフトはエクセルVBAのみ考えてます。Perl, Rubyなど別プログラムは来世で考えます。
「データベースに登録」と言われてもピンと来ないので、SQL等はたぶん無理です。
現状で100万行の読み込みは可能です。配列に読み込むにしても2000万行は無理っぽいけど100万行は大丈夫だと思います。
懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。特に問題ないなら、案1で行きます。