- ベストアンサー
マクロを使用してCSVファイルの結合を行いたい
- 過去の質問の中から、素晴らしい結合のマクロを見つけましたが、パソコンをwindows7にエクセルをエクセル2010に変更した後、マクロが使えなくなりました。どなたか修正して頂けないでしょうか?
- 列の項目は定形で、10~200行のデータが書かれたCSVファイルが1つのフォルダに多数あります。新しいファイルに、NO.1のファイルのデータの続きにNO.2、NO.3・・・と続けてデータが下の行に連続して並ぶようにマクロで結合させたいと思っていますので、宜しくお願いします。
- Sub Test1() Dim files As FileSearch, FilesCnt As Integer, i As Integer Dim cBook As Workbook, pBook As Workbook FilesCnt = mySearch(files, ThisWorkbook.Path) If FilesCnt = 0 Then Exit Sub Set pBook = Workbooks.Add(xlWBATWorksheet) For i = 1 To FilesCnt Workbooks.Open files.FoundFiles(i) Set cBook = ActiveWorkbook cBook.ActiveSheet.UsedRange.Copy With pBook.ActiveSheet If i > 1 Then .Cells(.Range("A65536").End(xlUp).Row + 1, 1). _ PasteSpecial (xlPasteAll) Else .Cells(.Range("A65536").End(xlUp).Row, 1). _ PasteSpecial (xlPasteAll) End If End With Application.CutCopyMode = False cBook.Close Next i Set cBook = Nothing: Set pBook = Nothing End Sub '******************************************************************** Function mySearch(files As FileSearch, myDir As String) As Integer mySearch = 0 Set files = Application.FileSearch With files .NewSearch .LookIn = myDir .SearchSubFolders = True .Filename = "*.csv" If .Execute() > 0 Then mySearch = .FoundFiles.Count End With End Function
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こちらのような質問相談掲示板でも非常に良く寄せられるご質問の一種ですが、あなたが発見したマクロでやってるようにCSVファイルをエクセルで開いて操作すると、しばしばデータが変わってしまいます。今まで全く問題が無かったのでそこは絶対心配無いという事なら、勿論構いませんが。 既出回答にあるようにエクセルとか使わずにバッチで処理してしまう方が私も簡単とは思いますが、そこはまぁご質問なので、とりあえずベタなマクロでやらせてみると… sub macro1() dim myPath as string dim myFile as string dim s as string mypath = thisworkbook.path & "\" on error resume next kill mypath & "out.csv" on error goto 0 myfile = dir(mypath & "*.csv") if myfile = "" then exit sub open mypath & "out.csv" for output as #1 do until myfile = "" open mypath & myfile for input as #2 do until eof(2) line input #2, s print #1, s loop close #2 myfile = dir() loop close #1 end sub 結果はout.csvというファイルに書き出しています。 ブックをCSVファイルが保存してあるフォルダに放り込んでマクロを実行します。 やはり既出回答でも指摘されているように、勿論マクロ有効で開いてマクロをキチンと実行する必要があります。
その他の回答 (2)
- f272
- ベストアンサー率46% (8534/18272)
フォルダ内のテキストファイルを全て結合するだけなのに何故そんな大層なことをするの? そのフォルダ内に copy *.csv output.csv という内容のbatファイルを作って実行するだけでいいんじゃないの?
- kmetu
- ベストアンサー率41% (562/1346)
どこでエラーが出るのでしょうか エラーではなく、まったく動かないということでしたらリボンの下に最初に出るコンテンツの有効化ボタンを押さないと実行できません。 参照: http://officetanaka.net/excel/excel2010/008.htm
お礼
ありがとうございました。 とても簡単で、以前より早く作業ができました。 初心者なので、バッチで処理とかが良くわからなくて 申し訳ありませんでした。 とても助かりました。