![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?08b1c8b)
No.5ベストアンサー
- 回答日時:
> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。
それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。
だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。
なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。
ありがとうございます。
メモリに関しては問題ないということですね?
データの連続性は特に問題ありません。末尾の調整くらいはしますが。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?08b1c8b)
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枚です。速度アップのため配列に入れて使用すると思うので、実際は未使用です。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?08b1c8b)
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シート目くらいで力尽きました。で、今は回答頂いたファイル分割しようか思案してるところです。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?08b1c8b)
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も見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
-
4
100万件越えCSVから条件を満たす行のみ抽出し、編集してエクセルシートに出力するには?
Ruby
-
5
VBA 大きなtxtテキストファイルを開く方法
Excel(エクセル)
-
6
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
7
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
8
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
9
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
-
10
VBA csvを100万行ずつ各シートに読み込み
Excel(エクセル)
-
11
vbaのエラー対応(実行時エラー7:メモリが不足しています)
Visual Basic(VBA)
-
12
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
13
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
14
CSVの最終行は?
Excel(エクセル)
-
15
一列に並んでいる大量のデータを10個ずつ平均(A1~A2000まである
Excel(エクセル)
-
16
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
17
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
18
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
19
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
20
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
ページ読み込み時に自動的にsub...
-
MacからWinにファイルを添付す...
-
Microsoft VBAで2GBを超えるフ...
-
ファイルを音声で持ち帰りたい
-
EXCEL VBAでテキストファイルの...
-
ハイブリッド形式のCD-ROMについて
-
バイナリ形式のXMLファイルを読...
-
画像の保存方法。
-
エクセルVBA 2千万行のCSVファ...
-
FTPでエクセルをPUTするとファ...
-
EOF
-
C言語の質問です。バイナリ形...
-
リストビュー ⇔ 別ファイル構...
-
C言語でBMPファイルの内容を表...
-
EXCEL VBAで、バイナリデータの...
-
Javaでのエンディアン変換
-
なぜデータの整合性を確認する...
-
【Teraterm】filewritelnについて
-
ファイル名の先頭にアンダース...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
ページ読み込み時に自動的にsub...
-
エクセルVBA 2千万行のCSVファ...
-
EOF
-
VBA バイナリ―から文字列にす...
-
EXCEL VBAでテキストファイルの...
-
エラー:ストリームの終わりを...
-
入力ファイルをバイナリにする利点
-
【MFC】CFileでSeekした位置か...
-
C言語の質問です。バイナリ形...
-
【python】Excelファイルを読み...
-
MacからWinにファイルを添付す...
-
バイナリ形式のXMLファイルを読...
-
EXCEL VBAで、バイナリデータの...
-
テキストデータをSQLServerに取...
-
VBAでバイト型データをファイル...
-
HDDのバイナリイメージの取得方...
-
24ビットのWaveデータの中身に...
-
FMFファイルの構造を知りたいの...
おすすめ情報
1行ずつ読み込んで処理後にもう一行、は考えてません。1シート分のデータが揃って初めて処理が可能だからです。
ソフトはエクセルVBAのみ考えてます。Perl, Rubyなど別プログラムは来世で考えます。
「データベースに登録」と言われてもピンと来ないので、SQL等はたぶん無理です。
現状で100万行の読み込みは可能です。配列に読み込むにしても2000万行は無理っぽいけど100万行は大丈夫だと思います。
懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。特に問題ないなら、案1で行きます。