'同じフォルダにcsvファイルを置く '集計シートにtotalの名前をつける '各csvファイルのA2..A20をtotalシートに順に読み込む Sub scanCSV() Dim MyFile As String, MyPath As String Dim i As Long Dim wb As Workbook MyPath = ThisWorkbook.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "c*.csv", vbNormal) 'パス内のcsvファイル Application.ScreenUpdating = False '画面更新停止 Application.Calculation = xlCalculationManual '自動計算停止 Do Until MyFile = "" '対象ファイルがなくなるまで 'MsgBox "csv:" & MyFile, vbCritical Set wb = Workbooks.Open(MyPath & "\" & MyFile) '選択したファイルを開く ThisWorkbook.Sheets("total").Range("A2:A20"). Offset(, i).Value = wb.Sheets(1).Range("A2:A20").Value '隣のコラムに転記 i = i + 1 'カウント wb.Close (False) '選択したファイルを閉じる MyFile = Dir '次のファイルを検索 If i = 100 Then MsgBox "列が一杯になりました。", vbCritical Exit Do End If Loop '繰り返し Application.Calculation = xlCalculationAutomatic '自動計算停止解除 Application.ScreenUpdating = True '画面更新停止解除 Set wb = Nothing MsgBox i & "件のCSVファイルから転記しました。", vbNormal End Sub
フォルダの内部ファイル
フォルダの内部のファイル名を取得するには
MyFile = Dir(MyPath & "c*.csv", vbNormal)
を利用します。MyPath はファイルを探すフォルダでこの場合は、このVBAのあるフォルダとします。c*.csv はcで始まる、拡張子csvのファイルです。
* は任意の文字列(ワイルドカード)になります。
複数のファイルがある場合、次のファイルは
MyFile = Dir
で取得できます。MyFileが "" になったら、すべてのファイルを取得したことになります。
概要
フォルダの中のCSVファイルを読み取り、データを集計します。
プログラム
MyPathに、VBAのあるパス(フォルダ)を取り出します。MyFile = Dir(..) で、このフォルダの内部の csv ファイルを取り出します。
繰り返しループの Workbooks.Open() でファイルを開きます。この時、自動計算処理を省くため、Application.Calculation
などの設定をします。
読み込んだシートのA1..A20 を自分の total シート読み込みます。したがって、あらかじめこの名前のシートを作成しておきます。
Offset(, i) は列方向を i だけずらします。したがって、読み込む内容は A列から順に B,C に転記されます。
wb.close で読んだファイルを閉じ、ループで次のファイルを読み込みます。