実践プロジェクト:データ集計システム(Excel VBA)
音声
目次
プロジェクトの要件(複数ファイルからデータ収集)
目的は、複数のExcel(同一フォーマット)から自動でデータを収集し、商品別・担当別などで合計を出すことです。
前提として、全ファイルで列見出し(日付/担当/商品/数量/売上など)が一致している必要があります。
マクロは集計用ブック(.xlsm)に置き、元ファイルは読み取り専用で扱います。
標準モジュールへコードを置くのが扱いやすく、実行権限(マクロ有効化)を必須とします。
フォルダ内の全Excelファイルを開く処理
フォルダの列挙はDirが簡単で高速です。サブフォルダの再帰処理や属性の詳細取得が必要な場合はFileSystemObjectを使う方法が適しています。
処理中はApplication.ScreenUpdating = FalseとApplication.EnableEvents = Falseを設定すると高速化しやすいです。
テンポラリ(~$)や隠しファイルはスキップしておくと安定しやすいです。
Excelファイルは読み取り専用(ReadOnly:=True)で開くと、意図しない上書きを避けやすいです。
大量ファイルを扱う場合は、処理前にファイル一覧を作っておくと、中断時の再開や復旧が行いやすいです。
データの統合と集計ロジック
流れは「取り込み→辞書で集計→出力」です。
各ファイルの必要行を集計シートへ追記し、Scripting.Dictionaryでキー(商品名など)ごとに数値を累積すると高速で簡潔です。
列は固定列番号で参照(Cells(row, col))し、値取得はValue/Value2を用途で使い分けます。
処理後に辞書のキー順で集計シートに出力し、AutoFitなどで体裁を調整します。
失敗ファイルは別配列やErrorsシートに記録して後で確認します。
集計結果のレポート作成
出力は見やすさを優先し、ヘッダ書式や数値書式(#,##0)、桁区切り、ソート(順位付け)を行います。
運用面では集計結果を別ブック(例:YYYYMMDD_集計.xlsx)として保存し、マクロが不要な場合は.xlsxで出力します。
頻繁に使う場合はボタン割当やクイックアクセス登録で実行性を高めます。
最後に合計チェック(=SUM(B2:Bn)等)とMsgBoxで件数確認を行います。
エラー処理の実装(ファイルが開けない場合など)
Workbooks.Open直後にエラー検出の仕組みを入れ、開けないファイルはログ化してスキップします。
実装例として、ファイル単位では On Error Resume Next で Err.Number を確認し、問題があればErrorsシートへ日時・ファイル名・Err.Number・説明を追記して Err.Clearします。
共通処理型では On Error GoTo のハンドラでログ化と後片付け(Close/Release)をまとめます。
ロックや破損がある場合は、ReadOnly指定にするか、手動対応のワークフローを用意します。
注意(ここだけ)
-
集計列順や見出しが一致しないと誤集計になるため、事前にサンプルで列順を確認することです。
マクロは必ずバックアップを取り、初回は少数ファイルでテスト実行することです。
要約
同一フォーマットの複数ファイルから自動でデータを収集し、辞書でキーごとに合計する設計が効率的です。
ファイル列挙は単純ならDirを使い、サブフォルダも含めるならFileSystemObjectを使うのが適しています。
処理中は画面更新とイベントを止め、ReadOnlyで開いて保存ミスを防ぐ運用が要チェックです。
集計結果は別ブックで保存し、書式・ソート・合計チェックを行うと品質を保ちやすいです。
開けないファイルはログに残し、On Errorで個別または共通ハンドラにより安全にスキップ・記録するのが確実です。