VBAでCSVを10万行ずつ各シートに読み込む方法

このQ&Aのポイント
  • Win7 64bit SP1、エクセル2010の環境で、「1000万行×3列」のCSVファイルデータを、100万行ずつシート1~10に振り分けたいと思っています。しかし、エクセルは100万行しか対応していないため、一旦開いて各シートに分割する方法は使えません。また、1行ずつ読み込む方法も時間がかかりそうですし、カンマ記号も含めて1行全体がエクセルのセルに入ってしまう可能性もあります。どなたか良い方法をご存知の方がいらっしゃいませんか?
  • VBAを使用し、Win7 64bit SP1、エクセル2010の環境で、「1000万行×3列」のCSVファイルデータを、100万行ずつシート1~10に振り分けたいと考えています。ただし、エクセルは100万行までしか扱えないため、一度に全データを読み込むことはできません。また、1行ずつ読み込む方法も時間がかかりますし、CSVの1行全体が1つのセルに入ってしまう可能性もあります。効率的な方法をご存知の方がいらっしゃいましたら、教えていただきたいです。
  • Win7 64bit SP1、エクセル2010の環境で「1000万行×3列」のCSVファイルデータを、100万行ずつシート1~10に分割したいと考えています。ただし、エクセルの制限で100万行までしか扱えないため、一度に全データを読み込むことはできません。それぞれの行のデータを読み込む方法も時間がかかりそうですし、1行全体が1つのセルに入ってしまう可能性もあります。より効率的な方法をご存知の方がいらっしゃいましたら、アドバイスをいただきたいです。
回答を見る
  • ベストアンサー

VBA csvを100万行ずつ各シートに読み込み

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • MKT_
  • お礼率99% (329/330)

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

>そのようにいたしますと、「,」(=カンマ)で区切られたCSVファイルの1行のデータ全てが エクセルの「A1」に入ってしまいます。 実際に私の提示した方法を試されたのでしょうか? 私が提示した方法は、エクセルの一般機能(区切り位置)で上記のようなデータを列に自動的に分割する方法を紹介しています。 このように1回だけ区切り位置の機能を利用すると、その設定をエクセルが記憶していて、2回目からコピー貼り付けするだけで、自動的に列に分割してくれます。 自分でマクロコードを編集や記載する手間や時間を考慮すれば(毎日何回も同じ作業を繰り返すようなことがないなら)、私の提示した方法でショートカット操作を使えって操作すれば、10回のコピー貼り付け操作は5分もあればできると思うので、実戦的には効率的だと思うのですが・・・

MKT_
質問者

お礼

 どうもありがとうございます!助かりました。m(_ _)m エラーばかり表示されてエクセルもワードも固まってしまうため、貼り付け自体が行えておらず「データ区切り」まで試すことができておりませんでした。  まず「CSV→Wordで読み込」時に「エラー:…使用可能な最大ページ数を超過したか、文書が破損しています。…」と表示されたため読み込みが行えず、秀丸で読み込むことにいたしました。  しかしそれでもテキスト→エクセル貼り付け時に、「リソース不足です。」と表示されてしまい、(PCのメモリは16GBだったのでございますが。。。) 別のPC(メモリ32GB)に移動して貼り付けようとしたところ、今度は「貼り付けできません」というエラーが出てまいりました。これについては同様なエラーで困っておられる方が多いようで「オブジェクト非表示の状態になっている」事が原因の事例が多いようでしたが、私の場合は当てはまっておりませんでしたので、諦めました。  新しいエクセルファイルを用意してテキスト→エクセルの貼り付けを行ったところ、貼り付けが出来ましたので、何が原因なのかは時間をかけて調べれば分かりそうでございます。  ただファイル数が50ほどあるのでVBAで出来る方法を探していたのでございますが、これについては、お教えいただいた「データ区切り」機能を実行できるコードを見つければ解決出来るのでは、と考えております。  この度はご親切にお教えいただき誠にありがとうございました!^^

その他の回答 (4)

  • weboner
  • ベストアンサー率45% (111/244)
回答No.4

100万行超のデータをExcelで扱う方法 無料のMicrosoft COMアドイン Office 365 ProPlus /Office Professional Plus 2013/単体販売のExcel2013で利用可能 Microsoft Power BI 紹介サイト http://www.gixo.jp/blog/2252 http://www.gixo.jp/page/1?s=Power%20Pivot Microsoft http://www.microsoft.com/ja-jp/office/2013/business/powerbi/default.aspx

MKT_
質問者

お礼

 どうもありがとうございます!m(_ _)m 試させていただきましたが、XP時代に開発されたもののようで 最大行=65,536まででございました。今回は1,000,000で分割したいので 使用できませんでしたがおそらく、類似ソフトがあるように思われます。 なので探してまいります。  この度はご親切にどうもありがとうございました。m(_ _)m

MKT_
質問者

補足

>お礼コメント  大変失礼いたしました。No.3様へのお礼のコメント欄に書いたつもりでございました^^; 今から試してまいります!どうもありがとうございます!m(_ _)m

  • RandenSai
  • ベストアンサー率54% (305/561)
回答No.3

こちらは使えませんか?ずばり、CSVファイルを任意の行数・項目数に分割するツールです。 https://www.hioki.co.jp/support/soft01/power_current_sensor/46/ このソフトを提供している会社は測定器屋さんで、電圧の変動を測定し記録するような機械を作っています。これで例えばデータ収集間隔が1ミリ秒の24時間収集なんてやった場合、出来上がるデータの行数は8640万行にもなり、とてもじゃないですけどExcelでは開けないし、編集しろと言われても困る巨大データになります。こうなることがわかっているので、こうした分割ツールが必要になるわけです。

MKT_
質問者

お礼

 どうもありがとうございます!m(_ _)m 試させていただきましたが、XP時代に開発されたもののようで 最大行=65,536まででございました。今回は1,000,000で分割したいので 使用できませんでしたがおそらく、類似ソフトがあるように思われます。 なので探してまいります。  この度はご親切にどうもありがとうございました。m(_ _)m

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

No1の回答の補足です。 ワードで100万行のデータを取り扱ったことはないのですが、100万行目を何回も選択することが手間かもしれないので、ワードの機能を利用した以下のような手順が簡単です。 Ctrl+Gでジャンプダイアログを出して「移動先」を「行」にして「10000001」と入力してOKします。 その後Ctrl+Shift+Home→Ctrl+X→エクセルでCtrl+Vで1サイクルですが、2回目からはワードに戻ってCtrl+Gで、上記の設定が残っているのでそのままOKして次のブロックのコピー(切り取り)操作をすると効率的だと思います。

MKT_
質問者

お礼

 どうもありがとうございます!m(_ _)mm(_ _)m No.1のお礼に書かせていただきました通り、今回は難しそうでございますが Ctrl+Shift+Homeを存じませんでした(^^)便利ですねこれ。今までスクロールバーでずーっと移動しておりました^^;  ご親切にアドバイス頂き誠にありがとうございました!!

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 この程度の作業なら、私なら以下のような方法で編集してしまいます(長くても5分もあれば作業できると思います)。 csvファイルをワードで開いて、ページレイアウトタブの「行番号」をクリックし「連続番号」を表示しておきます。 このファイルを100万行単位で切り取り、すなわち右のスクロールバーをスライドして100万行目を見つけて、Ctrl+Shift+Homeで100万行を選択して、Ctrl+Xで切り取り、エクセルにCtrl+Vで貼り付けて、最後に「データ」「区切り位置」で「次へ」で区切り文字を「カンマ」にして「完了」します。 2回目からは、同様に100万行分を切り取り、エクセルに貼り付ければ、区切り位置の設定をExcelが記憶していますので自動的にセルに分割されます。

MKT_
質問者

お礼

 どうもありがとうございます!m(_ _)m そのようにいたしますと、「,」(=カンマ)で区切られたCSVファイルの1行のデータ全てが エクセルの「A1」に入ってしまいます。 (CSVファイルの1行目「○○, △△, (チェック)(チェック)」→エクセルのA1=「○○」、B1=「△△」, C1=「(チェック)(チェック)」 としたいのですが、 テキストやワードで開いて行選択でコピペすると、A1=「○○, △△, (チェック)(チェック)」になってしまいます。)  もしデータ量が少なければ、そのあとでVBAか関数でカンマをSplitしても良いと思うのですが、 今回は100万行ありますので難しそうでございます。orz  この度はご親切に誠にありがとうございました!!m(_ _)m

関連するQ&A

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • CSVファイルを読んでシートに書き込む方法

    エクセルのマクロ(VB6.5)でCSVファイルをよんでシートに書き込みたいのですが誰か教えて下さい。 例えば CSVファイルはこんな感じだとします。 ファイルID:test.csv ファイル内容  (1レコード)123,123,123,123,123,123  (2レコード)456,456,456,456,456  (3レコード)789,789,789,789 書き込むシートは「abcシート」とします。 CSVファイルはカンマ区切りですがレコード毎にカンマ区切りのデータ数が違います。 シートには指定したセルに書き込めば一番いいのですが、上から順番に書き込んでもいいです。 申し訳ありませんが、宜しくお願い致します。

  • CSVの3行目だけを…

    はじめまして!Nakanoと申します。 えっと、以下質問になります。おねがいします。。 CGI/Perlを始めて1週間程度の素人なのですが、 CSVファイルをHTMLのテーブル表示させる 様にしたいなと思っています。 そこで用意したCSVファイルが5行と8列で カンマ区切りのみで構成されています。 このCSVファイルから3行目だけを抽出する方法 ってありますでしょうか? 1行目のみ表示や1行目以外の2行目以下全てを表示 させたりは出来たのですが、3行目だけを表示するの がどうしても分かりませんでした・・・・・ 何方様か。よろしければその辺の所を詳しくご指導 いただけないでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Perl
  • ExcelのVBAでCSVを読み込むと通貨になる

    Excel2010のVBAでCSVファイルを読み込んで処理させたいのですが、読み込んだデータをExcelが勝手に別のデータに変えてしまうので困っています。 例えば、123,456というデータは、フィールドにカンマがあるので、CSVでは"123,456"となりますが、これを以下のようなVBAのコードで読み込ませると、書式が通貨として扱われてしまって、データも123456になってしまいます。文字列として読み込まれていれば正しいデータとして読み込まれるように思うのですが、文字列として読み込ませる方法が分かりません。正しく元のデータ123,456のまま読み込ませるにはどうすればいいのでしょうか。 なお、CSVの各フィールドにカンマやダブルクォーテーションが混在していると、各フィールドに分割する処理が複雑でよく分からないので、下記のコードのようにExcelの機能でCSVを各フィールドに分割される方法で読み込ませたいです。 よろしくお願いします。 Workbooks.Open Filename:= "file.csv"

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • CSVファイルの取り込みについて

    CSV取り込み方法について 教えていただきたくお願いいたします。 エクセルのマクロ・VBAの組み方について デスクトップ上の000という名前のCSVファイルを、作業しているエクセルファイルのLoadという名前のシートに貼り付けたいと思っています。 CSVファイルはエクセルで開くと1行に11列の項目が展開されています。 貼り付ける項目はこのようになります。 (CSV) →(エクセルのLoadシート) 1列目(A行)→B行へ 2列目   →C行へ 3列目   →D行へ 4列目   →E行へ 5列目   →F行へ 9列目   →G行へ 10列目  →H行へ 11列目  →I行へ (6.7.8列目は使いません) 最後にLoadのシートのA行に”=B&E”とい式を入力したいと思っています。 まだ初心者なので勉強中なのですが、仕事上急遽必要になりましたのでお願いいたします。

  • CSVをダウンロードし保存せずに開くと、1セルに1行表示されてしまいます。

    CSVファイルをエクセルで開くと、カンマ区切りでセルが分かれます。 しかし、WEBでCSVをダウンロードし、保存せずにそのまま開くと、1セルに1行表示されてしまいます。 数日前までは、カンマ区切りでセルが分かれていたのですが…。 同僚やお客様先からも、昨日今日で同じような問合せがきはじめたので、アップデートに絡んでいるのかな?とも思っています。 何が原因で、対処法があるのか教えていただけませんでしょうか。

  • Csvから1行ずつ変数に格納するには;

    いつもお世話になっています。 次のようなcsvファイルがあります。 会員番号,パスワード,データ1,データ2,データ3 1234567,1111,1970/1/1,1990/4/1,A 1111111,1,1960/1/1,1985/4/1,AB ・ ・ ・ このcsvファイルをExcelのVBAで次のようなコードで読みとろうとしています。 Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile("csvファイル名") Set ts = f.OpenAsTextStream(1, -2) ssk = ts.readline readlineは1行だけ読み込むと覚えているのですが、なぜか変数sskにはすべての行が連結された状態で格納されてしまいます。 2回目以降のreadlineでは「ファイルにこれ以上データがありません。」と出ます。何か根本的に間違っているのでしょうか;; このようなcsvファイルを、正しく1行ずつ変数に格納する方法にはどのようなものがありますでしょうか。 よろしくお願いします。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • VBA CSV形式で保存したいのですが

    EXCELで、以下のような表を作成してあります。   A       B       C 1 あ,10 2 い,20,100 3 う,30 4 え,40,200,か 5 お,50 A列にカンマを含めたデータが入っており、 1000行程度あります。 このようなデータをCSV形式で保存したいのですが、 単純にVBAを組むとそれぞれのデータが""で囲まれます。 また、上記例の3行目(以降)のデータの終わりに「,」が 出力されてしまいます。 例:   あ,10 い,20,100 う,30, VBAで、 (1) ""で囲まれることなく、 (2) 行内のデータの個数によって,をつける位置を判断させて (3) セルに入っているカンマ区切りのデータをB列等に分離せずに 保存する方法はないでしょうか? ご教授、よろしくお願いします。

専門家に質問してみよう