dポイントプレゼントキャンペーン実施中!

こんにちは、同様の質問があるようですが、ポイントはもとのファイル名の情報を、統合後のファイルに盛り込みたい、という点です。

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

csvファイルが200程あり、全部コピペという訳にもいかず、焦っております。何卒よろしくお願いします。

A 回答 (4件)

エクセルに取り込む方法が紹介されているので、ひとつのファイルにまとめるスクリプトを書いてみました。



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

'----ここまで
    • good
    • 3

文字列置換系のコマンドラインツールを使ったバッチファイルでも処理出来そうです。



まずはツールです。そのままスバリなネーミングの「文字列置換」を入手して下さい。(作者:星野 香奈 様)
http://www.vector.co.jp/soft/win95/util/se271454 …
解凍後の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が生成されます。
    • good
    • 3

 一つずつ手作業になりますが、テキストファイルウィザードを使って


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

参考URL:http://enterprisezine.jp/article/detail/675
    • good
    • 0

手作業になりますが、普通に考えるとこうなると思います。


csvファイルをダブルクリップするとExcelが起動してcsvファイル名のシートで開きます。
シートのコピーまたは移動で保存用のExcelにシートごと移動すれば、csvがシートごとに分けられた1本のxlsファイルができます。
1ファイル200シートになってしまいますが‥‥。

1シートに統合しなければいけないのであれば、左端(または右端)にcsvファイル名のカラムを追加してあとで区別できるようにするしか無いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!