• 締切済み

エクセルのマクロを教えて下さい

csvファイルなのですが、ファイルサイズが大きくて、エクセルでは全部を開くことが出来ません。 csvファイルを開くことなく、指定行から指定行までを取り出すようなマクロを教えて下さい。 なおエクセルは、エクセル2000を使用しています。 (会社の指定でエクセル2000以降のバージョンは使えません)

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.3

WindowsやExcelで処理可能なテキスト形式だとして・・・ 過去の質問を検索したところ、同様のものがありました。 タイトル:VBAで巨大なファイルの途中からの読み込み 投稿日時:2007/10/07 00:21 http://okwave.jp/qa/q3407338.html No.1さんの解答にある最初のリンク(asahi-netのもの)のCSV読込の方法と上記の質問の質問文中の行読み飛ばしの方法を組み合わせればよいのではないでしょうか。 (上記質問の解答ではなく質問文中の記載です) さらに高度な方法として、上記の過去の質問の解答No.3にSQLを使う方法についての説明があります。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

James-Bondさん、こんにちは マクロを利用してやれないことはありませんが、本件については、実は非常に面倒くさいものになる可能性があります。なぜなら、そのcsvファイルの実態がどのようなものかが私からは見えないからです。 65536行を超えた(ひょっとしたら256列も超えているかもしれませんね)csvファイルというのは、たいていの場合、誰かがExcelで編集して作成したものではなく、どこかの基幹系システムから検索・ダウンロードされたものである可能性が高く、そうしたものは、得てして、WindowsやExcelの規則にのっとっていないことがあるからです。 具体的には、 ・「改行コード」がWindowsのものと異なっている(改行コードについては別途検索してください) ・全て、あるいは一部のデータが「"」(ダブルクォーテーション)で囲まれている場合がある という2点です。 特に前者の場合、そうとは知らずマクロを作成すると、データ量によってはマクロが途中で固まってしまう恐れがあります。 というわけであくまで行数だけが問題で、列数が256列を超えていないのであれば、少々手間がかかるかとは思いますが、Excelではなく「テキストエディタ」を利用することをお勧めします。 テキストエディタとは、文字を編集するだけのソフトウェアのことで、Windowsに標準で入っている「メモ帳」もそれにあたるのですが、メモ帳は機能が少ないため、別途ソフトウェアをインストールしてください。 ここでは無償で利用できる「サクラエディタ」を利用します。(サクラエディタについては別途検索し、ダウンロード・インストールをしてください) さて、インストールができたら、目的のcsvファイルを右クリックして、「SAKURAで開く(E)」を選択するか、サクラエディタを開いてから目的のcsvファイルをドラッグするなどして、サクラエディタ上で目的のファイルを開きます。 必要な行を選択し、コピーしたあと、新規作成で新しいウィンドウを開き、貼り付けたあと、名前を付けて保存します。その際、「ファイルの種類(T)」は「全てのファイル(*.*)」とし、ファイル名の最後に「.csv」を必ずつけましょう。 ちなみに、例えば10001行目から20000行までといったように、大量すぎてマウスで選択するのは難しいが、選択したい行が具体的に分かっている場合は、以下の操作にて選択可能です。 1) Ctrlを押しながらJを押し、行番号として「10001」を記入し、ジャンプボタンを押します。 2) 10001行目の先頭にカーソルが合ったら、「F6」キーを押します(範囲選択モードになります)。 3) 再びCtrlを押しながらJを押し、行番号として、20000行の次、すなわち「20001」と記入し、ジャンプボタンを押します。 (少し慣れてきたら、上の操作を「キーマクロの記録」で保存し、一発処理することも可能です) 新しく作成したcsvファイルをダブルクリックすれば、Excelで開くことができます。 お使いのPCに秀丸が入っていれば、http://okwave.jp/qa/q190399.html の方法で上と同様指定行の選択が可能となります。 あくまでマクロで行いたいのであれば、まずは該当のcsvファイルが、2007以上のExcelで手作業にて作成したものかどうかを教えてください。そしてもしそうでないならば、サンプルcsvではなく、実際に加工したいcsvファイルを、恐らくセキュリティや秘密保持の関係で不可能と承知の上で言いますが、どこかのアップローダにアップロードしていただく必要があります。それができないのであれば、 ・改行コードが"CR"なのか?"CR+LF"なのか?"LF"なのか?はたまたそれ以外か?(それ以外ということはないでしょうが)  ⇒ 改行コードがLFの場合、通常のデータ量を列数・行数・バイト数にて提示いただく必要有り ・データの全てがダブルクォーテーションで囲まれているか?また、データそのものにダブルクォーテーションが存在するか?そのあたりの規則性をできるだけ詳しく という、最低2点をご回答いただく必要がございます。そして回答いただいた上で、「やはりマクロを利用するのはあきらめてください」となるかもしれません。 CRって何?LFって何?・・・といったように、もし上の私の質問が何を言っているのか分からないのであれば、お手数かとは存じますが、テキストエディタを利用した上の方法で対応ください。

James-Bond
質問者

お礼

元データが16万行もあることがわかり、エクセル単独での作業は断念しました。 ご教授誠にありがとうございました。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_020.html こんなのはいかが? そもそも基本的な事からわからないなら、こちらもどうぞ。 http://excelvba.pc-users.net/ 丸投げしてるのなら、 何が問題で、何をどうしたいか明確にしてください。 自分でやるにも明確化できていないと無理です。 サイズが大きい。 →行数が多いのか?一行の要素数が多いのか?また、その両方か? CSVを開く →なにで開く?多分excelだろうけど、省略しないように。 →何を使うにしてもファイルは開かないと内容はわからないと思う。 取り出す →取り出すって具体的になんでしょう? →excelのシート上に表示すること? →どんなシートに? →どんな風に? 指定行A~指定行Bまで B<Aのときはどうするの? →逆順表示する? |A-B|+1(指定範囲の行数)がexcelで開ける最大行数超えたらどうする? というくらいは、考えられないとコードは書けないと思います。

James-Bond
質問者

補足

アクセスで開くと16万行もありました。エクセルの守備範囲外だと思いますので、エクセルでの抽出は断念します。 『エクセルのマクロを教えて下さい』というタイトルからして、エクセルで開こうと考えるのは常識の範囲だと思います。 そもそもご指摘のような条件が、事前に自分で考えられるのなら、自分でマクロを組んでいたと思います。

関連するQ&A