複数のExcelファイルを一括集計するマクロの作り方|フォルダ内を自動でまとめる
「店舗ごと・担当者ごとに分かれた何十個ものExcelファイルを、毎月ひとつずつ開いてコピペし、ひとつの集計表にまとめている」——こうした作業は、ファイルが増えるほど時間がかかり、コピペ漏れや行ずれといったミスも起きやすくなります。
この記事では、フォルダ内にある複数のExcelファイルを一括で集計するマクロ(VBA)の作り方を、考え方から実装の流れ、つまずきやすい点まで具体的に解説します。コードの全文ではなく「何をどう組み立てるか」が分かることを目指した内容です。
手作業で複数ファイルを集計する課題
複数のExcelファイルを手作業でまとめると、次のような負担が積み重なります。
- 純粋な作業時間: 1ファイルを開いて貼り付けるのに1分でも、30ファイルなら30分。これが毎月、毎週となると無視できません。
- ミスの起きやすさ: 貼り付ける行のずれ、ファイルの開き忘れ、同じファイルの二重集計などは、見つけにくく後工程に響きます。
- ファイル数の変動: 月によって店舗数や担当者数が変わると、手順そのものが毎回変わってしまいます。
- 属人化: 「どのファイルをどう集計するか」がその人の頭の中にしかなく、休むと業務が止まります。
これらは、フォルダ内のファイルを自動で順に処理する仕組みにすればまとめて解消できます。
自動化の考え方|処理の流れを順序立てて整理する
マクロを書く前に大切なのは、人が手でやっている作業を「手順」に分解することです。複数ファイルの集計は、突き詰めると次の流れのくり返しです。
- 1. フォルダ内のファイルを一覧化する: 集計対象のExcelファイルが入ったフォルダを決め、その中のファイルを順番に拾い上げます。
- 2. ファイルを1つ開く: 一覧の先頭から、ブックを1つずつ開きます。
- 3. 必要な範囲を取得する: 開いたブックの決まったシート・決まった範囲(例: 売上の明細部分)を読み取ります。
- 4. 集計表へ転記する: 読み取った値を、まとめ先の集計ブックの「次の空き行」に追記します。
- 5. ファイルを閉じる: 開いたブックを保存せずに閉じ、次のファイルへ進みます。
- 6. 全ファイルが終わるまでくり返す: フォルダ内のファイルがなくなるまで2〜5を反復します。
- 7. 集計表を保存する: すべて転記し終えたら、まとめ先のブックを保存します。
この「順に開く→取得→転記→閉じる→くり返す」という流れさえ固まれば、あとはそれをVBAの命令に置き換えていくだけです。
VBAでの実装ステップ(概念とコード断片)
ここからは、先ほどの手順をVBAでどう書くかを要点だけ示します。長いコード全文ではなく、各ステップで使う中心的な命令を押さえておけば、組み立てのイメージがつかめます。
ステップ1|フォルダ内のファイルを列挙する(Dir関数)
フォルダの中のファイル名を順に取り出すにはDir関数を使います。最初の呼び出しで条件に合う最初のファイル名、次からは引数なしで呼ぶと次のファイル名が返り、なくなると空文字になります。
fileName = Dir(folderPath & "\*.xlsx") のように拡張子で対象を絞り、Do While fileName <> "" でループを回すのが基本形です。
ステップ2|ブックを開く(Workbooks.Open)
取り出したファイル名から、Set wb = Workbooks.Open(folderPath & "\" & fileName) でブックを開きます。開いたブックは変数wbに入れておくと、後で範囲指定や閉じる処理がやりやすくなります。
ステップ3|必要な範囲を取得して転記する
開いたブックの対象シート・範囲を、まとめ先ブックへ写します。1セルずつではなく範囲ごと値を渡すと高速です。擬似コードで書くと次のイメージです。
- 転記先の「次の空き行」を求める:
nextRow = matomeSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1 - 元データの範囲を値だけコピーする、または範囲の値を直接代入する:
matomeSheet.Range(...).Value = wb.Sheets(1).Range("A2:E100").Value
「どのシートのどの範囲を読むか」をファイルごとに固定できるかが、シンプルに作れるかどうかの分かれ目です。
ステップ4|閉じて次へ、最後に保存
転記が終わったらwb.Close SaveChanges:=False で元ファイルを変更せずに閉じます。ループの最後に fileName = Dir を置くと次のファイル名が得られ、ループが続きます。全ファイル終了後、まとめ先ブックを保存して完了です。
全体の骨組みを擬似コードで示すと、次のようになります。
fileName = Dir(対象フォルダ\*.xlsx)Do While fileName <> ""-
ブックを開く → 範囲を取得 → 集計表の空き行へ転記 → ブックを閉じる -
fileName = Dir Loop→集計表を保存
つまずきやすい点と対策
実際に作ると、次のような点でつまずきがちです。あらかじめ想定しておくと安定したマクロになります。
- ファイル形式の違い:
.xlsx・.xls・.xlsmが混在していると、拡張子の指定だけでは拾い切れません。対象を統一するか、複数の拡張子を順に処理する設計にします。集計マクロ自身のファイルや一時ファイルを誤って開かない工夫も必要です。 - 見出し行の扱い: 各ファイルの1行目が見出しの場合、見出しまで転記すると集計表に見出しが何度も混ざります。データは2行目以降から読む、といったルールを決めておきます。逆に、ファイルによって見出しの位置や列の並びが違うと崩れるため、形式の統一が重要です。
- エラー処理: 壊れたファイル、パスワード付きブック、開いている最中のファイルがあると、そこで処理が止まります。
On Errorでエラーを受け止め、問題のファイル名を記録してスキップする仕組みがあると、途中で全体が止まりません。 - 速度と画面のちらつき: ファイル数が多いと時間がかかります。
Application.ScreenUpdating = Falseや自動計算の一時停止で大幅に速くなります。
自分で作るのが難しい場合の外注の目安
考え方はシンプルでも、ファイル形式の違いやエラー処理まで含めて「毎月安心して回せる」マクロに仕上げるには、相応の知識と検証が必要です。次に当てはまるなら、外注を検討する価値があります。
- VBAの学習に時間をかけられない、または学習コストが削減効果に見合わない
- ファイルの形式や数がバラバラで、自力では安定して動かせない
- 一度きちんと作って、長く安定して使いたい
- 以前作ったマクロが壊れていて、中身が分かる人がいない
当サービスでは、複数ファイルの一括集計マクロの作成は内容により5,000円〜を目安としています(ファイル数・形式のばらつき・必要な処理の複雑さにより変動します)。正式な料金は内容を確認のうえお見積もりします。費用感は料金表もあわせてご覧ください。実際にどれくらい時短できるかは対応事例も参考になります。
なお、ファイル間の単純な転記の自動化についてはExcelの転記作業を自動化する3つの方法でも解説しています。あわせてご覧ください。
まとめ
複数のExcelファイルを一括集計するマクロは、「フォルダ内のファイルを順に開く→必要な範囲を取得→集計表へ転記→閉じる→くり返して保存」という流れに分解すれば、VBAのDir関数・Workbooks.Open・ループ処理で実現できます。ポイントは、ファイル形式や見出し行を揃え、エラー処理を入れて止まらない作りにすることです。「自分のファイル構成でうまく作れるか不安」という場合は、無理に作り込まずご相談ください。構成に合わせて、安定して回せる集計マクロをご提案します。