VBAで複数シートのデータを集計する:効率的な自動化と実装例

EXCEL

VBAで複数シートのデータを集計する:効率的な自動化と実装例

1. 課題背景と実務シナリオ

複数シートに分散したデータを集計する作業は、多くのビジネスシーンで発生します。例えば、営業部では各営業担当者の売上データが別シートに記録され、月次の集計が必要となるでしょう。人事部では、部署別の従業員情報がシートごとに管理され、全体の人員構成を把握する必要があるかもしれません。このような状況で、手作業によるデータのコピー&ペーストは時間と労力を要するだけでなく、ヒューマンエラーのリスクも高まります。VBAによる自動化は、これらの課題を解決し、集計作業の効率化と正確性の向上に大きく貢献します。

2. 関連情報調査

本記事作成にあたり、以下のリソースを参考にVBAによる複数シートデータ集計の方法を調査しました。

3. VBA実装コード

3.1 簡易例:特定列の合計値を集計

各シートのA列の合計値を新しいシート”集計結果”に表示するシンプルなコードです。

Sub SumColumnA()

  Dim ws As Worksheet
  Dim total As Double
  Dim lastRow As Long

  Sheets.Add After:=Sheets(Sheets.Count).Name = "集計結果" ' 集計結果シートを追加

  total = 0
  For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "集計結果" Then ' 集計結果シート自身は除外
      lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
      total = total + WorksheetFunction.Sum(ws.Range("A1:A" & lastRow))
    End If
  Next ws

  Sheets("集計結果").Range("A1").Value = "A列の合計:"
  Sheets("集計結果").Range("B1").Value = total

End Sub

3.2 応用例:複数列の集計とエラー処理

複数の列を集計し、空のシートを処理する際のエラーをハンドリングします。

Sub SumMultipleColumns()

  Dim ws As Worksheet
  Dim i As Long
  Dim lastRow As Long
  Dim data As Variant

  Sheets.Add After:=Sheets(Sheets.Count).Name = "集計結果"

  ' 集計する列のヘッダー名
  Dim header As Variant
  header = Array("売上", "利益")

  ' 集計結果シートにヘッダーを追加
  For i = 0 To UBound(header)
      Sheets("集計結果").Cells(1, i + 1).Value = header(i)
  Next i


  For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "集計結果" Then
      On Error Resume Next ' エラー発生時は次の処理へ
      lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
      If Err.Number <> 0 Then  '空のシートの処理
          Err.Clear
          GoTo NextSheet
      End If
      data = ws.Range("A1:B" & lastRow).Value '売上と利益を配列に格納

      For i = 2 To lastRow
          Sheets("集計結果").Cells(i, 1).Value = Sheets("集計結果").Cells(i, 1).Value + data(i, 1)
          Sheets("集計結果").Cells(i, 2).Value = Sheets("集計結果").Cells(i, 2).Value + data(i, 2)
      Next i
NextSheet:
      On Error GoTo 0 ' エラーハンドリング解除
    End If
  Next ws

End Sub

4. 応用展開・類似課題との比較

  • Power Query (PowerPivot): GUIで直感的にデータ連携と集計を行えます。VBAより学習コストが低い反面、複雑な処理にはVBAの方が柔軟に対応できます。
  • Python (pandas): 大量データ処理に優れ、より高度な統計分析も可能です。Excelとの連携もライブラリを用いて実現できます。

5. 注意点とベストプラクティス

  • エラー処理: On Error Resume Next は適切に使い、エラー発生時の処理を記述しましょう。
  • シート名: シート名を動的に取得する処理を追加し、シート名の変更に対応できるようにしましょう。
  • データ型: データ型を意識し、数値データと文字列データの混在によるエラーを防ぎましょう。
  • パフォーマンス: 大量データの場合は、Application.ScreenUpdating = False などを用いて画面更新を一時的に停止することでパフォーマンスを向上できます。

6. まとめと実務ヒント

VBAは複数シートのデータ集計を自動化するための強力なツールです。適切なエラー処理とパフォーマンスチューニングを行うことで、業務効率の劇的な向上を実現できます。 明日からすぐに使えるTipsとして、まずは簡易例を試して、徐々に複雑な集計に挑戦してみてください。 さらに、Power Queryなどの他のツールとの連携も検討することで、より柔軟で効率的なデータ処理を実現できるでしょう。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました