• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA csvを100万行ずつ各シートに読み込み)

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つのセルに入ってしまう可能性もあります。より効率的な方法をご存知の方がいらっしゃいましたら、アドバイスをいただきたいです。

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

  • ベストアンサー
  • 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