• ベストアンサー

複雑な抽出条件のプログラム

お世話になります。 現在事務作業で、あるアプリケーションから吐き出される、 カンマ区切りのCSV形式のテキストデータを特定条件で 必要項目を抽出しExcelに貼り付けるという作業を手作業で行なっております。 それをプログラム化出来たらなと思い質問してみました。 作業内容なのですが、 まず、1行目がテキストデータ(日付などが記載されている)となっており、 実データが2行目から書かれており、 3列目の項目に特定の数字がある行の中から、 さらに5列目の項目に特定の文言(2バイト文字)を見つけ、 5列目と重複する行は、破棄。 ただし、10列目の日付(YYYY/MM/DD)の、MMが違えば残す。 そして、その残った行の中から、1,2,3,10,11,13列目のみをエクセル等で吐き出す。 という作業を3ヶ月ほど、エクセルのフィルターという機能を使いながらやっているのですが、 200件、300件となると、相当な時間がかかり、下手するとExcelの桁あふれ、 65000行超えやメモリー不足で固まったり…となかなか大変です。 この作業を何とか一本のプログラム?マクロと言いますか、VBAと言いますか、 そういった物を使って効率化できないかと考えています。 当方、プログラム等使ったこともなく、またExcelの関数を使ってみたのですが あまりに複雑すぎて挫折してしまいました。 こちらに居られる皆様に、この難しい抽出⇛書出を行ういい方法があれば教えて下さい。 今後、吐き出されるCSV形式が変わった時でも対応できるよう 自分でも理解して使いたいと思っています。 当方の環境、WindowsXP、Office2007となります。 よろしくお願いします。

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.5

 CSV(コンマ区切りのテキストファイル)に落とされているのなら、テキスト処理が得意な言語を使用するほうが楽でしょう。  ただCSVはアプリケーション依存ですから、excel出力の場合は注意が必要です。 ・日付の行で変数にMMを代入 ・各行を配列に入れます。 ・配列の3番目の項目に指定した文字列があるもの  ・5番目の値と10番目の値をチェックする。   該当するものを新しい配列に加える。 という単純な作業ですね。 Perlなら $A = "3列目の文字パターン"; open(IN,<test.csv); while(<IN>){ ※CSVから配列@valueにする処理  ⇒CSV形式の行から値のリストを取り出す( http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values )  if($value[2] =~ /$A/){   @test split "/",$value[9];   if($check == ""){$check = $test[1];}   else{    if($check != $test[1] ){$check = $test[1];}   }   $newLine = "$value[0],$value[2],$value[9],$value[10],$value[12]";  } } とか・・  エラー処理/strict等一切考えていません。

その他の回答 (7)

  • liners0
  • ベストアンサー率60% (3/5)
回答No.8

回答No.7です。参考までに当方でのサンプル結果。 サンプルデータ: 3151行(3150件)、13列  抽出後は 451行、6列 プログラム  : 12行 (本体の機能のみ空白行含まず、UWSCフリー版) 実行速度   : 0.624秒 (初回の最も遅い値) WIN8pro[3GHz,8GB]

  • liners0
  • ベストアンサー率60% (3/5)
回答No.7

この手の処理を得意とするUWSCをお勧めします。 CSVファイルを単独で処理できます。 シンプルで強力な文字列処理、複雑な演算に加え CSVファイルをまるで配列のように直接扱えます。 詳細な具体例を添付して、UWSC掲示板へ投稿してみてください。 その強力さに。きっと驚かれるでしょう。

  • aoyama984
  • ベストアンサー率45% (253/561)
回答No.6

ちなみに 5列目の条件は ソートをすれば 重複するものが隣に並ぶのか 特定の文言 とは一つor複数 CSVは ダブルコーテーション””を使用しているか http://officetanaka.net/excel/vba/filesystemobject/index.htm 2007では65536行から100万に拡張したのでは 実データは何件あるのか 取り込みができるなら Excel上で できないなら CSVのまま処理する テキストを読むか ADOで処理する http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html 具体的なデータ例を提示してほしい 10件ほど

  • warpspace
  • ベストアンサー率56% (83/147)
回答No.4

ANo.3ですが、すみません訂正です。  優良→有料

  • warpspace
  • ベストアンサー率56% (83/147)
回答No.3

下記のようなCSVファイル編集ソフトがあります。 優良であり質問者さんのご要望の抽出条件を設定できるか否か不明ですが、 30日間のお試し期間がありますので、試してみてはどうでしょうか。

参考URL:
http://www.yamamototakashi.com/soft/nextcsv/index.html
  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.2

まあ、私ならVBAに慣れているので、取り込んでからVBAで 処理すると思いますが、どっちにせよ、それだけ仕様がしっかり 決まっているなら、プログラムに慣れた人なら別にむずかしい プログラムじゃないですよ。 とはいえ、プログラミングの基礎ができてないなら、そこをクリア するのが大変ですから、#1さんの言われるように、専門家に 依頼した方がいいかもです。

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

csvならスクリプト言語で行うほうが早いと思いますよ。 データベースに入れてSQLでもいいですが、初心者ならスクリプト言語のほうが簡単だと思います。 python, perl, php, ruby辺りで好きな言語を選んで、それで処理してはどうでしょう。 蛇足ですが、SOHOに依頼すれば3000円以下の1時間以内で仕上げてもらえると思うので、その方面を検討するのもありだと思います。 参考までに。