CSV形式の工数データをExcel VBAで集計し、月別・担当者別・企業別・種別別に整理したいというケースは、業務自動化の中でもよくある処理です。手作業でソートや集計を行うとミスが発生しやすいため、マクロ化することで効率化と正確性を両立できます。本記事では、初心者でも理解できる形でVBAの基本構造と実装例を整理します。
処理の全体構造を理解する
今回の処理は「読み込み」「集計」「出力」の3ステップで構成されます。
CSVデータを開いた後、列ごとにSUM処理やグループ化を行い、新しいシートへ結果を出力します。
まずは全体の流れを理解することで、コードの意味が分かりやすくなります。
CSVファイルの読み込みと基本準備
CSVはExcelで開くと通常のワークシートとして扱えます。
VBAではWorkbooks.Openを使用して対象ファイルを開きます。
その後、集計用の新しいシートを追加して出力先を確保します。
月別総工数(I列)の集計方法
月別総工数はI列の数値を合計することで算出できます。
最もシンプルな方法はWorksheetFunction.Sumを使うことです。
例:合計値を新規シートのA1セルに出力する処理を行います。
担当者別工数(B列でグループ化)
担当者別集計では、まずB列でデータをソートし、同一ユーザーごとにI列を合計します。
Dictionaryオブジェクトを使うと効率的にグループ集計が可能です。
ループ処理でキー(担当者名)ごとに加算するのが基本構造です。
企業別・種別別の集計方法
企業別(E列)や種別別(F列)も同様に、キー列を変えるだけで処理できます。
それぞれDictionaryでグループ化し、I列の値を加算します。
結果は前段の集計結果の下に順番に追記していきます。
サンプルVBAコード(基本形)
以下は構造を簡略化したサンプルです。
Dim ws As Worksheet, wsOut As Worksheet
Dim lastRow As Long, i As Long
Dim dict As Object:Set dict=CreateObject(“Scripting.Dictionary”)
Set ws=ActiveSheet
lastRow=ws.Cells(ws.Rows.Count,”A”).End(xlUp).Row
For i=2 To lastRow
key=ws.Cells(i,”B”).Value
val=ws.Cells(i,”I”).Value
If dict.exists(key) Then dict(key)=dict(key)+val Else dict.Add key,val
Next i
このように基本構造を使い回すことで、各集計処理を統一できます。
まとめ
CSVの工数集計は、列ごとのグループ化と合計処理を組み合わせることで自動化できます。
VBAではDictionaryを活用することで柔軟かつ高速な集計が可能です。
処理構造をテンプレート化すれば、担当者別・企業別・種別別も簡単に拡張できます。


コメント