あなたは複数のエクセルフォルダを1つにまとめて集計するのが面倒だと思ったことはありませんか?
例えば、10人のメンバーからExcelファイルを提出してもらい、1つのExcelにまとめてさらに別の方に提出するなどの場合、10個のファイルを1つにまとめるのは面倒ですよね。
Aさんのファイルを開いて、集計ファイルに転記して、
Bさんのファイルを開いて、集計ファイルに転記して、
Cさんのファイルを開いて、集計ファイルに転記して・・・10人分もやってられません。
そんなときはExcel VBAでファイルを1つにまとめれば、集計するのも簡単です。
今回は「Excelで複数のファイルを1つにまとめて自動集計する方法」を紹介します。
Excelで複数のファイルを1つにまとめて自動集計する方法
Excelで複数のファイルを1つにまとめて自動集計する方法です。
今回は、A、B、Cのファイルを、集計ファイルにまとめるのを例に紹介します。

集計ファイルには、1月~3月の売上集計するシートと、A,B,C,のシートがあります。

A,B,Cのシートは空欄です

別のA,B,Cのファイルには、それぞれ売上の数字が入っています。

これを「集計」ファイルにまとめていきます。
マクロを作るときは、「開発」タブを使います。
開発タブが出ていない方は、下のリンクで出し方を紹介していますので、まずは準備をお願いします。
→エクセルで開発タブを表示する方法
1.「開発」タブをクリック →「挿入」をクリック →「ボタン」をクリック

2.「新規作成」をクリック

3.コード入力画面が開く

4.コードを入力
コードを入力します。
A,B,Cファイルを、集計ファイルにまとめる、という内容です。

5.ボタンができた
ボタンができた

6.ボタンを押す →集計完了
ボタンを押すと、「集計が完了しました」と出ました。

A,B,Cのシートに、ファイルの数字が入りました。

集計シートにも、集計された数字が反映されました。

集計シートには数式が入っていて、A,B,Cシートの数字を合計するようになっています。

(シートをまたいで合計する方法は、下のリンク先でも紹介しています。
→エクセルで別のシートをまたいで合計する方法 SUM関数)
これで集計が簡単になりましたね!
まとめ
Excelで複数のファイルを1つにまとめて自動集計する方法です。
1.「開発」タブをクリック →「挿入」をクリック →「ボタン」をクリック
2.新規作成をクリック
3.コード入力画面が開く
4.コードを入力
5.ボタンができた
6.ボタンを押す →集計完了
これでフォルダ内のファイルの集計が簡単にできて便利です!
最後に今回使ったコードです。
Dim wb集計 As Workbook
Dim wb元 As Workbook
Dim ws元 As Worksheet
Dim ws先 As Worksheet
Dim フォルダ As String
Dim ファイル名 As Variant
Dim i As Long
'集計ファイルを取得
Set wb集計 = ThisWorkbook
'集計ファイルが保存されているフォルダ
フォルダ = wb集計.Path & "\"
'対象ファイル名
ファイル名 = Array("A.xlsx", "B.xlsx", "C.xlsx")
'画面更新を停止して高速化
Application.ScreenUpdating = False
On Error GoTo エラー処理
'A、B、Cの順に処理
For i = LBound(ファイル名) To UBound(ファイル名)
'元ファイルを開く
Set wb元 = Workbooks.Open( _
Filename:=フォルダ & ファイル名(i), _
ReadOnly:=True)
'元ファイルの1枚目のシート
Set ws元 = wb元.Worksheets(1)
'集計ファイルの対応するシート
Set ws先 = wb集計.Worksheets( _
Replace(ファイル名(i), ".xlsx", ""))
'貼り付け先をクリア
ws先.Cells.ClearContents
'データをコピーして貼り付け
ws元.UsedRange.Copy _
Destination:=ws先.Range("A1")
'元ファイルを保存せずに閉じる
wb元.Close SaveChanges:=False
Set wb元 = Nothing
Next i
'集計ファイルを保存
wb集計.Save
Application.ScreenUpdating = True
MsgBox "A・B・Cの集計が完了しました。", vbInformation
Exit Sub
エラー処理:
'エラー時も開いた元ファイルを閉じる
On Error Resume Next
If Not wb元 Is Nothing Then
wb元.Close SaveChanges:=False
End If
Application.ScreenUpdating = True
MsgBox "処理中にエラーが発生しました。" & vbCrLf & _
"対象ファイル:" & ファイル名(i) & vbCrLf & _
"エラー内容:" & Err.Description, vbExclamation

コメント