200個あるファイルの特定セルの足し算をしなければならなくなりました。
ファイル名は数字で001~200まである状態です。
何か便利な方法はありますか?
マクロなどありましたらよろしくお願い致します。
マクロでの実行例です。
実際のファイルに合わせて、赤い部分を変更して実行してみてください。
'// 集計するデータ位置 Const dataCell = "A1" '//データファイルのフォルダ 最後は \ Const dataFilePath = "C:\Data\" Sub sumBooks() Dim filePath As String Dim sumWS As Worksheet '// 集計用シートを先頭に追加 With ThisWorkbook Set sumWS = .Worksheets.Add(before:=.Worksheets(1)) End With For i = 1 To 3 filePath = dataFilePath & Right("000" & i, 3) & ".xls" With Workbooks.Open(filePath) '// B列にファイル名を表示 sumWS.Cells(i, "B").Value = .Name '// C列にデータを表示 sumWS.Cells(i, "C").Value = .Worksheets(1).Range(dataCell).Value .Close End With Next '// A1 に 合計を表示 sumWS.Range("A1").Formula = "=SUM(C1:C200)" End Sub
マクロを動かしたファイルの先頭シートに結果が集計されます。
マクロでの実行例です。
実際のファイルに合わせて、赤い部分を変更して実行してみてください。
'// 集計するデータ位置 Const dataCell = "A1" '//データファイルのフォルダ 最後は \ Const dataFilePath = "C:\Data\" Sub sumBooks() Dim filePath As String Dim sumWS As Worksheet '// 集計用シートを先頭に追加 With ThisWorkbook Set sumWS = .Worksheets.Add(before:=.Worksheets(1)) End With For i = 1 To 3 filePath = dataFilePath & Right("000" & i, 3) & ".xls" With Workbooks.Open(filePath) '// B列にファイル名を表示 sumWS.Cells(i, "B").Value = .Name '// C列にデータを表示 sumWS.Cells(i, "C").Value = .Worksheets(1).Range(dataCell).Value .Close End With Next '// A1 に 合計を表示 sumWS.Range("A1").Formula = "=SUM(C1:C200)" End Sub
マクロを動かしたファイルの先頭シートに結果が集計されます。
Mookさん回答ありがとうございます。
何とかなりそうです。
ちなみにファイル名が違った場合(漢字のファイル名+数字、ランダムな数字)どこをいじればよいのかも教えていただけると幸いです。
先の回答は、3つまでのファイルで試したので、For の範囲が3までになっていました。
失礼しました。
ファイル名が数値だと書かれていたので、ファイル名を数値としたのですが、
いろいろな名前だとすると難しいですね。
指定したフォルダに、あるファイルを全部集計するという処理でよいなら、下記のようでどうでしょうか。
'// 集計するデータ位置 Const dataCell = "A1" '//データファイルのフォルダ Const dataFilePath = "C:\Data\" Sub sumBooks() Dim filePath As String Dim sumWS As Worksheet '// 集計用シートを先頭に追加 With ThisWorkbook Set sumWS = .Worksheets.Add(before:=.Worksheets(1)) End With Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim file As Object Dim index As Long index = 1 '// フォルダ下のすべてのファイルを処理 For Each file In fso.GetFolder(dataFilePath).Files filePath = dataFilePath & file.Name With Workbooks.Open(filePath) '// B列にファイル名を表示 sumWS.Cells(index, "B").Value = file.Name '// C列にデータを表示 sumWS.Cells(index, "C").Value = .Worksheets(1).Range(dataCell).Value .Close End With index = index + 1 Next '// A1 に 合計を表示 sumWS.Range("A1").Formula = "=SUM(C1:C200)" End Sub
回答回数が2回になりましたので、コメントを有効にしていただければ、不明点はコメントで回答いたします。
たびたび回答ありがとうございます。
非常に参考になりました。
Mookさん回答ありがとうございます。
何とかなりそうです。
ちなみにファイル名が違った場合(漢字のファイル名+数字、ランダムな数字)どこをいじればよいのかも教えていただけると幸いです。