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も見ています
-
とっておきの「夜食」教えて下さい
真夜中に小腹がすいたときにこっそり作るメニュー、こっそり家を抜け出して食べに行くお店… 人には言えない、けど自慢したい、そんなあなたの「とっておきの夜食」を教えて下さい。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
-
4
VBAで巨大なファイルの途中からの読み込み
Visual Basic(VBA)
-
5
VBA 大きなtxtテキストファイルを開く方法
Excel(エクセル)
-
6
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
7
100万件越えCSVから条件を満たす行のみ抽出し、編集してエクセルシートに出力するには?
Ruby
-
8
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
-
9
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
10
vbaのエラー対応(実行時エラー7:メモリが不足しています)
Visual Basic(VBA)
-
11
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
12
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
13
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
14
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
15
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
16
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
17
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
18
Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
バイナリデータ処理
-
バイナリ形式のXMLファイルを読...
-
入力ファイルをバイナリにする利点
-
ページ読み込み時に自動的にsub...
-
エクセルVBA 2千万行のCSVファ...
-
FTPでエクセルをPUTするとファ...
-
【python】Excelファイルを読み...
-
EXCEL VBAでテキストファイルの...
-
C言語の質問です。バイナリ形...
-
【Teraterm】filewritelnについて
-
VBA バイナリ―から文字列にす...
-
VBScriptでメタデータを取得したい
-
Microsoft VBAで2GBを超えるフ...
-
バッファサイズについて
-
ビットマップファイル生成(C言...
-
クリップボードからファイル名...
-
Javaでのエンディアン変換
-
24ビットのWaveデータの中身に...
-
エラー:ストリームの終わりを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
Microsoft VBAで2GBを超えるフ...
-
EOF
-
入力ファイルをバイナリにする利点
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
【MFC】CFileでSeekした位置か...
-
ページ読み込み時に自動的にsub...
-
MacからWinにファイルを添付す...
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
バイナリファイルの比較につい...
-
PHPのfgetcsvの処理容量について
-
ビットマップファイル生成(C言...
-
バイナリーデータの一部データ...
-
FMFファイルの構造を知りたいの...
おすすめ情報
1行ずつ読み込んで処理後にもう一行、は考えてません。1シート分のデータが揃って初めて処理が可能だからです。
ソフトはエクセルVBAのみ考えてます。Perl, Rubyなど別プログラムは来世で考えます。
「データベースに登録」と言われてもピンと来ないので、SQL等はたぶん無理です。
現状で100万行の読み込みは可能です。配列に読み込むにしても2000万行は無理っぽいけど100万行は大丈夫だと思います。
懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。特に問題ないなら、案1で行きます。