• 締切済み

膨大な量のcsvファイル(ファイル数1000件以上)から条件にあったセル位置を抜き出したいです

よろしくお願いします。 手元に大量のcsvフィルがあります(ファイル数1000件以上)。 何種類かのデータが上から順に入力されていて A列にその行のデータの種類が数字で示されているような体裁になっています。 例) 1枚のcsvシートに上から「各店舗でのりんごの小売価格」「みかんの小売価格」「バナナの小売価格」がまとめられていて(価格などの情報はB列以降に記載) 「りんご」「みかん」「バナナ」という種類がA列に「1」「2」「3」のような数字で示されている感じです。 1~4行がりんごのデータ、5・6行がみかん、7~9がバナナのデータという具合です。   A B C D ------------------------------- 1|1|100 2|1|120 3|1|90 4|1|100 5|2|50 6|2|30 7|3|100 8|3|150 9|3|100 これでみかんのデータの開始と終了のセル位置を(例の場合だと「A5」「A6」) 別のファイルのシートに一覧にしたいのです。 この例だと5~6行と簡単ですが、実際のcsvファイルはデータ量が膨大なため、この間の行数は数百行にのぼります。 各ファイルともだいたいセル位置が似通っているので今までは適当にジャンプ検索して目で確認していましたが、ファイル数が多すぎて手作業でやるには作業の負荷的に厳しいです。 私は普通の事務員なので自分で何かプログラムするというのは難しいと思います。 csvやエクセルのワザ、もしくはおすすめのフリーソフトなどでこれを解決できたらと思っています。 どうかご教授ください!

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 そのCSVファイルは、「各店舗」からのデータだと思います。 >私は普通の事務員なので自分で何かプログラムするというのは難しいと思います。 部下に丸投げということもないとは思いますが、そういう1,000ファイルのデータの管理は、業者さんに作ってもらたほうがよいと思います。 プログラムがある程度の経験のある人なら、それは可能ですが、掲示板の場で、手取り足取りというにはいかないし、最終的な解決に至らないような気がしてなりません。Access がない場合なら、mdb ファイルに変換して、それをExcelのAdo などを使って取り出すことを考えますが、そんなに簡単にはいかないのは、CSVを加工しないといけないだろうと考えます。今の状態ですと、ファイル名自体が、その「各店舗名」のデータだと思うからです。 それと、質問文は、全角・半角が混じっているようですから、そういう混じったデータなのか、そういう点にも不安を覚えます。 フリーウェアでも、テキストファイル(csvもテキストファイル)の抜き出しのツールもあるのですが、可能か不可能かは、やってみないと安易なことはいえません。テキストサーチとか、文字データ検索のツールで、そういうものはありますが、 たとえば、 ---ファイル名--- 5 2 50 6 2 30 ここだけを表示するということが可能か分からないのです。正規表現検索なら可能ですが、「正規表現」って何、という話になってしまうと思います。

monjuno
質問者

お礼

ご回答ありがとうございました。 今回は別の方法を活用いたしました。 ご教授いただいた内容は別の機会に使わせていただけたらと思います。 ポイントはさしあげられませんでしたが御礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

たくさんのcsvファイルがあって、この中のデータを一括で分類したいなら、コマンドプロンプトでテキストファイルの結合を利用して、その結合ファイルを並べ替えで一括処理するのが簡単です。 特定のcsvファイルではなく、フォルダ内のすべてのファイルを結合してもよいなら、ワイルドカードを利用してください。 たとえば, Cドライブのhozonフォルダに結合したいファイルを集めて,、tempフォルダに結合csvファイルを作成するなら以下のようなコマンドを実行してみてください。 copy c:\hozon\*.csv c:\temp\all.csv 参考URL http://www.relief.jp/itnote/archives/001770.php http://okwave.jp/qa356117.html

monjuno
質問者

お礼

ご回答ありがとうございました。 今回は別の方法を活用いたしました。 ご教授いただいた内容は別の機会に使わせていただけたらと思います。 ポイントはさしあげられませんでしたが御礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

全部のデータをデータベース(DB)に格納することをお勧めします。 どうもファイル名かファイル情報(作られた日)も含めてDBに入れたほうがよさそうですね。 具体的な利用方法が分かればもっと分かりやすいアドバイスもできると思いますが、少なくとも数百のファイルにわかれているのでは何をやるにしても面倒になると思います。

monjuno
質問者

お礼

ご回答ありがとうございました。 今回は別の方法を活用いたしました。 ご教授いただいた内容は別の機会に使わせていただけたらと思います。 ポイントはさしあげられませんでしたが御礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • csvファイルの読込みとソート

    いつも大変参考にさせていただいております。 csvファイルの読み込みとソートをしたく、ネットや過去ログ等を相当調べたのですが、完全に詰まってしまいました。 (検索キーワード:「php csv ソート」「php 二次元配列 ソート」など) とても困っています。どなたかよろしくお願いします。 以下のようなcsvファイルを読み込みソートしたいのです。 ■csvファイル 20110803, A, りんご 20111215, B, みかん 20110306, A, みかん 20110620, A, りんご 20110215, B, りんご ■個別にやりたい処理 (1)、左列の日付で昇順ソートしてすべて表示 (2)、「A」を含む行をすべて表示(日付順) (3)、「A」+「りんご」を含む行をすべて表示(日付順) □補足 csvをfgetcsvで読み込み、テーブルに入れて表示するところまではできました。 csvの行は増えていきます(max100行位)。列は固定。

    • ベストアンサー
    • PHP
  • CSVファイルの行と列のセルってどうやって指定するのですか?

    たとえば、1行目の2列目のセルの値を消したい。 2行目の5列目のセルの値に数字の5をいれたい。 って場合、行だったら $FILE=data.csv; open(IN, $FILE); @data=<IN>; close(IN); このときの $data[2]は3行目ですよね? では3行目の3列目はどうやって指定するのでしょうか?たとえば3行目の3列目のセルの数字の5だったのをperlを実行したらセルの中を6に書き換えるのはどうしたらいいのでしょうか?

    • ベストアンサー
    • Perl
  • マクロの組み方を教えてください【条件毎にCSVファイルで出力する方法】

    初心者で恐縮です。宜しくお願いいたします。 現在下記のようなデータがあるのですが    A    B    C ---- 1 りんご  @500  A倉庫 2 りんご  @130  C倉庫 80 みかん  @200  B倉庫   A列の内容(内容は固定できません)ごとにデータを抽出し、各内容ごとに CSVファイルで保存をしたいのですがVBAの組み方が分かりません。 どなたかご享受いただければ幸いです。宜しくお願いいたします。 例)りんご.csv    A    B    C ---- 1 りんご  @500  A倉庫 2 りんご  @130  C倉庫  

  • PHP CSVから条件にあう行を3行取りだしたい

    以下のようなCSVがあったとします。(data.csv)価格で降順にソートしてあります。 line0,line1,line2 1,ぶどう,200(円) 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) 5,みかん,50(円) ある果物を紹介するページがあったとして、 そのページには、他のオススメの果物として、csvからデータを読み込み、 その果物よりも安いもの3件を表示するという仕組みを作ろうと思っています。 ただ、安いものが3件無かった場合に、それよりも高いが、それに近い価格の果物を あわせて3件まで紹介したいと思っています。 今作っているPHPは以下の通りです。 ページに紹介されている果物=($fruits),価格=($price) です。 <?php $Data=file('/data.csv'); $j=0; for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); #表示ページの果物とCSVのline1が違い、価格が$priceよりも小さいものを3件まで表示 if($fruits != line1 and $price >= line2 and $j<3 ){     echo $line1 $line2.' </br>'; $j++; } } ?> で、価格が低いものを3件まで表示することはできました。 ぶどう200円のページであれば、 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) が表示されるようにはできました。 りんご100円のページには、 4,バナナ,80(円) 5,みかん,50(円) の2件のみが表示されています。 上記りんごのように、安いものが3件なかった場合に、 それより価格が高いが一番近いものから順に3件になるまでデータを 取りだしたいと思っています。 今回のりんごであれば、リンゴより安い、バナナ80円、みかん50円、 それに加え、リンゴより高いがリンゴの価格に一番近い、なし150円を表示させたいです。 みかんの場合には、安いものがないため、高いがみかんに近いものから3つ 2,なし,150(円) 3,りんご,100(円) 4,バナナ,80(円) を表示させたいです。 一体どうしたら良いのか、検討も付かず、教えて頂きたいです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • VisualBasicからcsvファイルを読み込む

    VisualBasicからcsvファイルを以下のようなプログラムで読み込んでいます。 Open ファイルパス For Input Shared As #1 Do Until EOF(1): Input #1, A(i), B(i): i = i + 1: DoEvents: Loop Close #1 n行2列のcsvファイルとn行3列のcsvファイルを読み込んだ時に A(2)にセルB1、B(2)にセルB2の値を代入したいです。 現状だとn行3列のcsvファイルを読み込んだ時に A(2)にはセルA3の値が入ってしまいます。 n行3列の3列目のデータは無視したいです。

  • エクセル AVERAGEを取るときに

    平均値を取りたいのですが 範囲が少し複雑だったのでどのように式を作ったらいいのか わかりません。 シート1に A列 りんご みかん ばなな このようにデータがありそれぞれシート2にある りんご の個数の平均値をB列に求めたいのですが シート2には A列   B列 りんご  3      8      9 みかん  5      9      10 このように果物の種類の項目名が1番上にしかなく 個数はそれに対して必ず3行あるので VLOOKUPなどを使うとりんごと書かれている真横のセルしか 参照しないので常にその項目の横のセルから3行を参照したい のですが どうしたらよいでしょうか? 教えてください。よろしくお願いいたします。

  • エクセルのセル内の重複文字列処理について

    よろしくお願いいたします。 セル内にスペースで区切られた文字列(単語)があり、文字列の数は不確定です。 その文字列の中で重複する文字列があり、それらを1つにまとめたいという要望です。 セルの行数は約6000ほどあります。 例 A1セル:リンゴ リンゴ みかん B1セル:リンゴ みかん A2セル:みかん バナナ みかん バナナ みかん B2セル:みかん バナナ ・・・ よろしくお願いいたします。 Windows7 HomePremium Office2010

  • 同名の値の最小値、最大値を求めるには?

        A列   B列 1行  りんご   3 2行  りんご   5 3行  なし    2 4行  なし    3 5行  なし    1 6行  なし    7 7行  みかん  2 8行  みかん  2 9行  みかん  3 上のようなデータで、りんご、なし、みかんについてそれぞれの最小値・最大値を別のセルに表示させるには、どんな関数を使ったらいいでしょうか。応用したい実際のデータは、A列の種類が200ほど、それぞれの種類のデータ数は1~80くらいあります。 よろしくお願いします。

  • csvファイルの特定のセルから読み込み

    C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている特定のセル数値(整数)を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に,2行目4列目のセルの値を読み込む プログラムは、どうのうにすればできるでしょうか?

  • Excelについて

    Excelに下記のようなデータが入っているのですが A列   |   B列 りんご |     2 みかん | 3 ばなな | 1 りんご | 6 すいか | 7 かき | 3 みかん | 4 すいか | 8 りんご | 1 *(実際には100件ぐらいのデータが入っています。) A列で同じ「りんご」があれば、同じ行にあるB列の値を合計したいのでがどうすればよいですか? また「りんご」だけでなく他にもあればその値を合計して出したいのですが。 例えば、今回の例では「りんご」が三箇所あるので「2+6+1]で9と表示したいのですが。 イメージとしては、 A列  |   B列 |   C列   |  D列 りんご |    2  |    りんご |  9 みかん |    3  |    みかん | 7 ばなな | 1  |    ばなな | 1 りんご | 6  |    すいか | 15 すいか | 7  |    かき | 3 かき | 3 | みかん | 4 | すいか | 8 | りんご | 1 | というようにしたいです。どなたか教えてください。

専門家に質問してみよう