• ベストアンサー

複数のcsvファイルを統合、でもファイル名情報は含んでもらいたい・・・

こんにちは、同様の質問があるようですが、ポイントはもとのファイル名の情報を、統合後のファイルに盛り込みたい、という点です。 複数のCSVファイルがあり、これを一つのファイル、もちろんエクセルでもOK、に一括統合したいです。いろいろなソフトがあるようですが、私が当ったところでは、ファイル名に関する情報を盛り込めず、ひたすら元のcsvデータが順次羅列されているという具合です。ファイル統合後も、もとの○○のデータがどの位置にあるかが分からないと厄介でして、なんとかご教示頂けますと幸いです。できればフリーソフトがあると幸いなのですが・・・。 プログラミング的素養がないため、マクロなどでしたら、初心者向けの説明でお願いできればと思います。 csvファイルが200程あり、全部コピペという訳にもいかず、焦っております。何卒よろしくお願いします。

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

  • ベストアンサー
  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.3

エクセルに取り込む方法が紹介されているので、ひとつのファイルにまとめるスクリプトを書いてみました。 200のファイルが同じフォルダにあること前提で書いてます。 VBAでもいいのですが、200ファイルもあると2003以前のExcelではおさまらない可能性もあるので、VBスクリプトで書いてます。 以下のコードをテキストファイルにコピーし、適当な名前.vbsで保存します。 保存したvbsファイルをcsvが置いてあるフォルダにコピーし、実行します。 すると、そのフォルダに結合.txtができます。 結合.txtの中身は csvファイルフルパス,csvファイルの行番号,csvファイルの中身 ・ ・ となります。 こんな感じでどうでしょうか '----ここからコード Option Explicit Dim strScriptPath Dim fso Dim Folder Dim FileName Dim objRE Dim OutTxt Dim ReadCsv Dim OutTmp Dim LineNum 'スクリプト名を含まないフルパスを編集する strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"") Set fso = CreateObject("Scripting.FileSystemObject") '対象フォルダの指定 Set Folder = fso.GetFolder(strScriptPath) '新規に作成するファイル Set OutTxt = fso.CreateTextFile(strScriptPath & "結合.txt") Set objRE = CreateObject("VBScript.RegExp") '検索条件の設定 objRE.Pattern = "\.CSV$" '指定のフォルダに格納された各ファイルを処理する For Each FileName In Folder.Files   '大文字化して比較する。拡張子がcsvなら1行ずつ読み込んで、   '処理中のファイルパスと行番号をいれつつ結合.txtに書き込む   If objRE.Test(Ucase(FileName)) Then     LineNum = 1     Set ReadCsv = fso.OpenTextFile(FileName)     Do Until ReadCsv.AtEndOfStream = True       OutTmp = FileName & "," & LineNum & "," & ReadCsv.ReadLine()       OutTxt.WriteLine(OutTmp)       LineNum = LineNum + 1     Loop          ReadCsv.Close()   End if Next OutTxt.Close() set fso = Nothing set Folder = Nothing set objRE = Nothing '----ここまで

その他の回答 (3)

  • yien
  • ベストアンサー率77% (24/31)
回答No.4

文字列置換系のコマンドラインツールを使ったバッチファイルでも処理出来そうです。 まずはツールです。そのままスバリなネーミングの「文字列置換」を入手して下さい。(作者:星野 香奈 様) http://www.vector.co.jp/soft/win95/util/se271454.html 解凍後のchikan.exeを使用します。 次にメモ帳などでバッチファイルを作成して下さい。 仮に名前をcsvadd.batとします。 内容は次の4行です。 dir *.csv /b > csv.lst for /F %%i in (csv.lst) do chikan %%i /r/n ,%%i/r/n del csv.lst copy *.csv all.csv この内容は、 1行目でディレクトリ内にあるcsvファイル名を取得してリスト化 2行目でリストに基づき改行コードを元ファイル名+改行に置換 3行目で先程生成したリストを削除 4行目でcsvファイルの一本化 という流れです。 後はcsvadd.batとchikan.exeを、200個のcsvファイルがあるフォルダに置いて、csvadd.batを実行します。 すると、excelで開くと最終列に○○.csvという元のcsvファイル名が各行に入っている、全てのcsvが統合されたall.csvが生成されます。

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.2

 一つずつ手作業になりますが、テキストファイルウィザードを使って CSVファイルをインポートすればCSVファイル名がシートのタブに 入ります。  一つにまとめるとシートが200のxlsファイルになるので目次ページ を作ってシートへのリンクを張るか、1ファイル20位にシートを 分割するといいと思います。

参考URL:
http://enterprisezine.jp/article/detail/675
  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.1

手作業になりますが、普通に考えるとこうなると思います。 csvファイルをダブルクリップするとExcelが起動してcsvファイル名のシートで開きます。 シートのコピーまたは移動で保存用のExcelにシートごと移動すれば、csvがシートごとに分けられた1本のxlsファイルができます。 1ファイル200シートになってしまいますが‥‥。 1シートに統合しなければいけないのであれば、左端(または右端)にcsvファイル名のカラムを追加してあとで区別できるようにするしか無いでしょう。

関連するQ&A

  • CSVファイルの複数情報項目をひとつにまとめる方法

    ExcelがPCに入ってる状態で、或るCSVファイルを開きます。 見た目はExcelファイルですが拡張子は.csvと付いてます。 この時、このCSVファイルには 顧客番号、顧客名、住所、電話番号、生年月日(年)、生年月日(月)、生年月日(日) などの情報項目があったとして、 このファイル上で、生年月日の(年)(月)(日)の3つの 項目を、一気に、ひとつの項目にまとめることは可能でしょうか? 「19801010」というように1項目(1セルというんでしょうか) にまとめたいのです。 それともこれは、一つ一つコピペしないと駄目なものでしょうか? ご存知の方、おたすけください! 宜しくお願い致します。

  • 複数個のcsvファイルから一気にデータを統合?

    初めて質問させていただきます。 毎日一定の書式が決まった形でデータを管理しております。(出勤簿).出勤者のみの氏名が表記される。 1.ファイル名(2005_1_1.csv)日付 2.シート1 3.列Aに通し番号(1.2・・・・)、列Bに氏名 社員名簿が一応あります。 1.A列に通し番号、B列に氏名(meibo.csv) この形で毎日記録をしておりましたので、データ(csv)ファイルがたくさんたまってしまいました。 そこで、このような複数のデ-タファイルを、社員名簿を元に、出勤日に●をつけるといったことをしたいと思っています。 一気に複数のファイルからデータを吸出し、統計を取ることは可能でしょうか? ちょっとデータの管理で困ってしまっていて、悩んでいます。 具体的な事例などをもしお教えいただけたら幸いです。

  • 改行のあるCSVファイルをExcelに読み込みたい

    CSVファイルをExcelにインポートしたいのですが CSVファイルのデータ内に改行が入っていたので、レイアウトが崩れて、 うまくExcelにインポートできない状態です。 改行を置き換えで取り除くと、すべて横並びになってしまいます。 1レコードは59項目と決まっているのですが、手作業で改行を入れるのは 数が多く難しそうです。 なんとかうまく取り込む方法はないでしょうか? プログラミングは全くわかっていない初心者ですが、 エクセルのVBAにコピペして実行することは可能です。。。 カテ違いだったらすみません><

  • MySQLで連続csvファイルを読み込むために

    MySQL 5.6を最近使い始めました。 大量のcsvファイルで保存されているデータを読み込んで、データベースとして扱いたいのですが、どうすれば良いでしょうか? ファイル名は、 data1_1.csv data1_2.csv data1_3.csv data2_1.csv data2_2.csv といった形で、規則正しく並んでいるのですが、大量にあるため、ループを使って自動化したいと思っております。そのために、LOAD DATA INFILE ファイル名 を使って、このファイル名を順次変えて繰り返す方法がわかりません。 まず、ファイル名に変数が使えるのかと思って @file="data1_1.csv"としてファイル名を置き換えてみたのですが、エラーでした。これでは、この1_1を順次動かす以前に変数が無理なのかも?と思っています。 何かやり方があるようでしたら、どなたかお教えください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • C++でのcsvファイル読み込みについて

    C++でのcsvファイル読み込みについて質問です. 読み込みcsvファイルの規模は300*1000として,その情報をdouble型の2次元配列に格納したいですが,ネットでいろいろ調べたり自分でコードを作ってみてもabort()has been calledなどいくつかエラーが表示されてしまい先に進めません. csvファイル名をa.csv,格納したい2次元配列をA[300][1000]などとしてサンプルコードを提供してくださいますと幸いです. 質問前に散々調べましたがプログラミング初心者でして今現在の力では対応できませんでした.申し訳ありませんが何卒ご教示お願いします.

  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • CSVファイルで掃き出すと、真っ白のファイルになる

    筆まめVer27で、「他の住所録形式で保存」でCSVで掃き出すと 当該CSVが真っ白で、中にデータがない状態のCSVファイルが生成されます。 ソフトを再インストールしてもダメでした。 なお、住所録ファイルが他5つあるのですが、当該ファイル以外は 問題なく動作しています。 お知恵をお借りできれば、幸いです。 よろしくお願い申し上げます。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • javaでcsvファイル処理

    プログラミング初心者の者です。 以下の様なデータの入ったcsvファイルを、javaで処理しなければならなくなりました。 #1 #2 #3 B 00 00 00 A 00 00 00 C 00 00 00 B 00 00 00 A 00 00 00 D 00 00 00 C 00 00 00 A,B,C,Dそれぞれのデータを、#1,#2,#3それぞれのテーマで集計 したいのですが、どういったプログラムを書けばいいのかよくわかりません。 csvファイルを読み込んで、吐き出す事だけはできているので、 間にどんなプログラムを書けば良いのか、ヒントを頂ければ幸いです。 宜しくお願い致します。

  • 複数のcsvファイルを1つのEXCELファイルにマージするVBAを教えてください

    csvファイル数は700~1000個程度でひとつのフォルダに格納されています。 このファイルをEXCEL形式で開くと、1行目にフィールド名(A~Z列で固定)、2行目以降にデータが入っています。行数はファイルにより1~100行程度で変動します。 このファイルを1つのエクセルファイルの同一シートに結合(マージ)するVBAがほしいです。 ここで、(できればですが)EXCELにマージするにあたり、1行目のみフィールドの値、2行目以降にそれぞれのcsvの2行目以降データの値を入れていくようにしたいです。つまり、フィールド名の行が何行も出てくるのを避けたいです。 申し訳ございませんが、ご指導いただけたら幸いです。よろしくお願いします。

専門家に質問してみよう