• ベストアンサー

沢山のCSVを一シートにまとめるコマンド

フォルダ内に1000ほどのCSVファイルがあります。 ファイルは18列で、一行目は常にタイトル行になっています。 行数は、まちまちで2~40程。全部外部データの取り込みで 取り込むと30000行ほどになります。 2行目以降からのデータを一括でまとめたいのですが よい方法はないでしょうか。

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

  • ベストアンサー
noname#97729
noname#97729
回答No.2

' フォルダ内のCSVファイルを統合 Option Explicit Dim strLine Dim Fs Dim objOutput Dim objIntput Dim oTarget Dim oFile Dim FileEx Dim t Dim s Const ForWriting = 2 Set Fs = WScript.CreateObject("Scripting.FileSystemObject") Set objOutput = Fs.OpenTextFile("result.txt", ForWriting, True) ' result.txtを書き込みモードで開く t = 0 s = 0 ' 現在のフォルダ内のファイル名を格納 Set oTarget = Fs.GetFolder(".") For Each oFile In oTarget.Files 'すべてのファイルに繰り返す FileEx = Fs.GetExtensionName(oFile) ' ファイル名から拡張子を抜き出す If FileEx = "csv" Then ' 拡張子を比較 (.csv)のとき処理 Set objIntput = Fs.OpenTextFile(oFile.Name,1,0) strLine = objIntput.ReadLine 'CSVファイルの先頭一行読み込み Do While objIntput.AtEndOfStream <> True 'ファイルの終端まで処理 strLine = "" strLine = objIntput.ReadLine ' CSVファイルの読み込み objOutput.WriteLine strLine ' 出力ファイルに書き出す s = s + 1 Loop objIntput.Close Set objIntput = Nothing t = t + 1 End If Next objOutput.Close Set objOutput = Nothing Set Fs = Nothing MsgBox "処理終了 CSV 数 = " & t & " 出力行数 = " & s ---------------------------------------------------- VBScriptで作りました。 CSVファイルの一行目を除き残りの行を統合します。 使い方 先頭の Option Explicit から MsgBox の最後までコピーして メモ帳などに貼り付けて保存してください。(名前はなんでもいいです) そして 拡張子を(.txt)から(.vbs)に変更します アイコンの形がメモ帳からSの形をしたものに変わります。 TESTフォルダをデスクトップにでも作り、そこにCSVファイルをコピーして 同じTESTフォルダにSの形をしたアイコン「(.vbs)のファイル」を入れてください で、Sの形をしたアイコンをダブルクリックすると(result.txt)のファイルができます。

galsone
質問者

お礼

ありがとうございます。 半手動でやっていたものが一発で解決しました。 なんとお礼を言っていいのやら・・・。ありがとうございました。

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

その他の回答 (1)

  • vaio09
  • ベストアンサー率37% (756/2018)
回答No.1

test1.csv : HogeHoge,1,2,3 HogeHoge,4,5,6 test2.csv : HogeHoge,100,200,300 HogeHoge,400,500,600 上記のようなファイル構成で「1列目の"HogeHoge"だけを削除したい、という ことでしょうか?ご質問の実現結果を 1,2,3 4,5,6 100,200,300 40,500,600 となると想定します。 (文面からは、行と列の用語が混在して、ちょっとわかり難かったです。上記理解は、あくまでも私の理解ですが、以下の考えは、他の処理でも役立ちます) 18列、ということは、,(コンマ)区切りで横方向にデータが並んでいると見られますから、「最初のコンマを含むデータを除くデータを抽出する」処理をファイル数だけ繰り返し、同じ出力ファイルに書き出せば済みます。 sed/grep/awkなどの文字列置換/抽出コマンドを使用したスクリプトを使う方法が考えられます。 Windowsでこれを実現するには、以下を試してください。 1)以下サイトからsedをダウンし、解凍します。 http://www.vector.co.jp/soft/win95/util/se028215.html 2)上記と同じフォルダに、csvファイルをコピーします 3)コマンドプロンプトから1のフォルダに移動します 4)1のフォルダに、以下内容のバッチファイル「test.bat」を作成します for %%x in (*.csv) do sed -e "s/HogeHoge,//g" %%x >> output.txt 5)test.batを実行します。 この構文のうち、*.csv は、調査対象のCVSファイルのことです。 HogeHoge という部分は、1列目の文字列で、全てのCSVで同じ文字列が入っているとします。 出来上がるファイルは、output.txtという名前で、 1,2,3 4,5,6 100,200,300 40,500,600 という内容になります。 ※各CSVファイルは、最終行が必ず改行コードで終わっている必要があります。

galsone
質問者

お礼

ありがとうございます。 色々な方法があるもんですね。こちらの方法もためさせていただきます。 本当にありがとうございました。

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

関連するQ&A

  • エクセルVBAでCSVファイルから取り込みたいのですが・・・

    CSVファイルのデータを取り込むコードを教えていただけないでしょうか。 「共有フォルダ」の中に「作業用.xls」と「090820.csv」があります。csvファイルは日によって名前が変わりますが、必ず一つしか入れないことにしています。 CSVファイルの1行目は見出しです。2行目以降がデータになっています。 A2からI列最終行を「作業用.xls」のsheet1のA6にコピー(取り込み)したいのですが、よろしくお願いします。

  • 行数の多い(65536行以上)csvファイルからピボットを作りたいので

    行数の多い(65536行以上)csvファイルからピボットを作りたいのですが、どうしたらよいでしょうか? 友人に、 1.アクセスにcsvファイルをとりこむ 2.エクセルのピボット作成で、外部データソースの取り込みを選ぶ 3.アクセスデータベスを選ぶ 4.アクセスのファイルのある場所を選んで、取り込んだファイルを選択 5.適当に「次へ」ですすんで、「完了」 でできるといわれたのですが、最後の「完了」の段階で、 「From句の構文エラー」 となってデータが取り込めません。 どなたか教えていただけないでしょうか。上記の方法でなくとも、行数の多いcsvファイルからピボットが作成できればいいのですが。

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

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

  • CSVファイルについて

    宜しくお願いします。 郵便局からダウンロードした全国一括ダウンロードのCSVファイルは、Excelで開こうとすると、行数が65535行を超えてしまい、全部読み込みきれません。 行数の縛りがなくて、Excelの様に表組みで表示してくれるソフトはないでしょうか??

  • 複数のエクセルファイルのシートを1枚のシートに

    100個以上のエクセル(CSV)ファイルの1枚目のシートに同じ書式のファイルが多数(100個程度)有るのですが、これを1枚のシートにまとめる方法は無いのでしょうか? 一枚のシートの行数は数行~50行以下で、全部のデータを1枚に纏めてデータ処理したいのですが、一括は無理でも出来るだけ簡単に出来る方法をお願いします。 尚、当方VBAは不得手で、あまり長いと(長くなくても)動くまでの試行錯誤の手間ひまで100枚のファイルのシートへのコピペが終わってしまう程度の実力ですので、ご配慮?お願い致します。

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • エクセルの各シートをアクセスで縦に結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 よろしくお願いします。

  • Excelでcsvファイルをエクスポートしても、""を残しておきたい

    csvファイルをインポートしてExcelで編集し、また、csvファイルとして書き出すと、元のcsvファイルにはあった文字列の引用符「""」が消えてしまいます。 また、csvファイルを「テキストインポートウィザード」や「外部データの取り込み」を使って文字列の引用符を「なし」でインポートするとExcel上では問題ないのですが、csvで書き出すと「""""""」と引用符が2組増えています。 ご存知の方、元のcsvファイルとまったく同じ引用符でエクスポートする方法を教えてくださいm(_)m

  • エクセルの各シートをアクセスで結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 空シートはありませんが、空白のセルはあります。 よろしくお願いします。

  • 複数CSVファイルをExcel形式1つにまとめたい

    VBA初心者です。 似たような質問・回答がありますが、どうも私の意図するところと異なるので、 新たに質問させていただきます。 どうぞお願いします。 仕事場で、基本1日1ファイル取得している複数のCSVファイルを、 1週間に一度Excelファイルに一週間分のデータを追加し、 最終的には1か月毎に1つのExceファイル(1シート)に集計してます。 全ファイルとも内容は同じで、1シートで作成されており、 タイトル行は1行目、2行目以降データ(行:データ数はファイル毎に異なる)、 列数はA-IV列といった構成になります。 新しい1つのファイルにまとめる際には、 B列とG列のみ抽出し、一行目にタイトル行、2行目からデータ、 最終行に次のファイルのデータと、いうように複数のファイルのデータをつなげて 1つのファイルにしたいのです。 ちなみに出来上がったExcelファイルとしては、 A列に元CSVファイルのB列データ、C列に元CSVファイルのG列データ、 B列に各データがどのCSVファイルの物か分かるように、 各ファイル名の日付にあたる後ろ部分を表示させたいのです。 ファイル名から日付を拾えない場合は、 ファイルをまとめる前に、列を挿入し、 C列にデータ日付の項目を作り、そこに日付を入力し、 まとめる際に、B・C列+G列を抽出、といった形で、まとめられたらと思ってます。 *各Exceファイルのタイトルの後部分がデータの日付を表す (タイトル例:0803abcde2013_08_03.xls) B列2行目以降に、それぞれ抽出したデータのファイル名から、 日付にあたる部分を書き出し(8月3日と言ったように)表示させたい。 場合によっては、前部分を抽出するパターンもあるので、そちらもお願いします。 *今後、他の何種類かの複数CSVファイルでもファイル毎に (こちらも全ファイルとも内容は同じ)同様に1カ月毎にまとめたいので、 違う条件でも抽出できるように、応用できたらと、考えております。 (抽出する列がB列とI列のみ、A~C列+F列など) VBAで作業したいと考えてます。色々とお手数ですが、よろしくお願いします。 また、他にお勧めのサイトや、参考になる質問がありましたら、 合わせて、教えていただけると幸いです。

このQ&Aのポイント
  • 筆王27のバージョンとパソコンのOSに関する質問です。
  • 具体的なお困り事やエラーを教えてください。
  • 製品のご利用に関する詳細をお知らせください。
回答を見る