
別質問で教えて貰った方法(下記URLの#2)で、複数のCSVファイルを
読み込むマクロはわかったのですが、それらのファイルを一つに
まとめる方法がよくわかりません。
新しいシート(or結果保存用のブック)を用意して、ここに順に繋げて
いきたいのですが、どうしたら良いのでしょうか。
ちなみに、入力されるCSVファイルのデータの入っている列数は固定
なのですが、行数はファイル毎に異なります。
<大元の質問>
http://oshiete1.goo.ne.jp/kotaeru.php3?q=359726
No.3ベストアンサー
- 回答日時:
こんにちは。
#2さんの回答で解決かもしれませんが、元の質問からの流れで、、、
単純な、開く、コピー、貼付け、閉じるの繰り返し処理です。
Sub Test()
Dim Files, FilesCnt As Integer, i As Integer
Dim cBook As Workbook, pBook As Workbook
Files = Application.GetOpenFilename _
(FileFilter:="CsVFile(*.csv), *.csv", MultiSelect:=True)
If IsArray(Files) Then
Set pBook = Workbooks.Add(xlWBATWorksheet)
FilesCnt = UBound(Files)
For i = 1 To FilesCnt
Workbooks.Open Files(i)
Set cBook = ActiveWorkbook
cBook.ActiveSheet.UsedRange.Copy
With pBook.ActiveSheet
.Cells(.Range("A65536").End(xlUp).Row, 1). _
PasteSpecial (xlPasteAll)
End With
Application.CutCopyMode = False
cBook.Close
Next i
End If
Set cBook = Nothing: Set pBook = Nothing
End Sub
どうもありがとうございました。
ただ、そのまま実行すると、1行ずつデータが短くなってしまったので、
下記の所を追加しました。
.Cells(.Range("A65536").End(xlUp).Row+1, 1). _
↑
こうしたら、うまくいきました。
No.4
- 回答日時:
こんにちは。
> ただ、そのまま実行すると、1行ずつデータが短くなってしまったので
確かにそうですね。
End(xlup).Row は最終データになるので、例のままでは最終データを上書きしちゃいますね。
No.2
- 回答日時:
準備:下のコードのdataFolderにCSVファイルのあるドライブ、フォルダを入力します。
10000件くらいで検証してみました。必要なら、Dt(10000, 5) As String の10000を増やして下さい。
ただし、限界はあります。(65536行を超えられないとか、メモリー具合です)
1.開始年月日を入力
2.終了年月日を入力
・・・指定したフォルダにある開始年月日.csv~終了年月日.csvのデータをSheet2につなげて書き出します。
データを統合した後、ソート等を行われると思い、期間中のファイルの処理順は考慮していません。
また、コードが長くなるので、入力ミス等に対するエラー処理等も省いています。
読み込むファイルを2次元配列に読み込んで、Sheet2(2行目から)にはきだしているだけです。
複数ファイルの読み込みにどのようなコードが書かれているか分からないので、自分なりに(勝手に)ループさせて読み込んでいます。
ただ、年月日を入力するとこが一番長い? ご参考に。
ここから
↓
Sub CSVfilesRead()
Const Kakucyoshi = ".csv"
Dim dataFolder As String
dataFolder = "D:\・・・\・・・\・・・"
If Right(dataFolder, 1) <> "\" Then dataFolder = dataFolder & "\"
Dim StartYMD As Date '開始年月日(日付)
Dim EndYMD As Date '開始年月日(文字)
Dim strStartYMD As String '終了年月日(日付)
Dim strEndYMD As String '終了年月日(文字)
'日付の入力
StartYMD = InputBox("開始年月日を入力して下さい。(yyyy/mm/dd)")
strStartYMD = Format(StartYMD, "yyyymmdd")
EndYMD = InputBox("終了年月日を入力して下さい。(yyyy/mm/dd)")
strEndYMD = Format(EndYMD, "yyyymmdd")
'ファイルの読み込み
Dim DataFile As String 'データファイル名
Dim fileNo As Integer 'ファイル番号
Dim Dt(10000, 5) As String '読み込み用配列
Dim c As Long 'データカウンタ
DataFile = Dir(dataFolder & "*" & Kakucyoshi)
While DataFile <> ""
If strStartYMD <= Left(DataFile, 8) And Left(DataFile, 8) <= strEndYMD Then
fileNo = FreeFile
Open dataFolder & DataFile For Input As #fileNo
Do Until EOF(fileNo)
Input #fileNo, Dt(c, 0), Dt(c, 1), Dt(c, 2), Dt(c, 3), Dt(c, 4)
c = c + 1
Loop
Close
End If
DataFile = Dir
Wend
Application.ScreenUpdating = False
'結果をSheet2に書き出す
With Worksheets("Sheet2")
.Activate
.Cells.Clear
.Range(.Cells(2, 1), .Cells(c + 1, 5)) = Dt
End With
Worksheets("Sheet1").Activate
Application.ScreenUpdating = True
End Sub
この回答への補足
どうもありがとうございます。
やってみたのですが、何故か、
Input #fileNo, Dt(c, 0), Dt(c, 1), Dt(c, 2),Dt(c, 3), Dt(c, 4)
のところで止まってしまいます。
原因は調査中なのですが、よくわかりません。
もし何かお気づきの点があれば、教えてください。
どうもありがとうございます。
やってみたのですが、何故か、
Input #fileNo, Dt(c, 0), Dt(c, 1), Dt(c, 2),Dt(c, 3), Dt(c, 4)
のところで止まってしまいます。
原因は調査中なのですが、よくわかりません。
もし何かお気づきの点があれば、教えてください。
No.1
- 回答日時:
csvは単純なテキストファイルですから、
copy a.csv+b.csv+c.csv d.csv
というようなコマンドで一発結合できますし、それさえ面倒ならunix系ツールのcatで
cat *.csv >all.csv
という処理をすれば、本当の一発結合が可能です。
マクロとは、また違う分野ですがご一考ください。
アドバイスどうもありがとうございます。
マクロで処理する前にデーターファイルを結合する訳ですね。
今考えている方法がどうしてもうまくいかないときには参考にさせて
頂きます。
ただ、できればそういう手間をかけずに、マクロを走らせるだけで
全ての処理ができるようにしたいと思ってるんです。
やっぱりそういうのは難しいのでしょうか。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAについて とある...
-
複数エクセルファイルの合成
-
Python CSVファイルについて
-
csv形式からbmpを作成
-
bmpファイルの明暗について
-
複数のcsvファイルを統合、でも...
-
アクセスと同フォルダのCSVファ...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
コマンドプロンプトの「%1」と...
-
バッチでテキストファイルから...
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
コマンドプロンプトで作成日時...
-
binファイルを解凍したいの...
-
一括でフォルダと同じ名前にフ...
-
バッチファイルでサーバーのフ...
-
VBAでワークシートを引数として...
-
バッチファイルの内容を表示さ...
-
アクセス 壊れた? 「ファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのVBAについて とある...
-
複数エクセルファイルの合成
-
Python CSVファイルについて
-
【Rコマンダー】データインポー...
-
アクセスと同フォルダのCSVファ...
-
複数のcsvファイルを統合、でも...
-
FTPコマンド mgetでとまってし...
-
エクセルマクロ、複数のCSVファ...
-
csv形式からbmpを作成
-
gnuplotで複数csvファイルから...
-
csvファイルを結合するバッ...
-
コマンドによるzip圧縮
-
複数のCSVファイルを読み込んで...
-
エクセル 指定範囲をCSV出力
-
csvをVBAを使ってエクセル形式...
-
MAC フォルダ内のPDF件数とペー...
-
EXCEL マクロが正常に動かなく...
-
バッチ処理でcsvファイルの文字...
-
Rでcsvファイルを読み込んだあ...
-
yahooカレンダーのデータをICS...
おすすめ情報