'同じフォルダに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 で読んだファイルを閉じ、ループで次のファイルを読み込みます。