【実務・中級編】リソースの「稼働状況」をCSV出力し、BIツールで可視化するためのデータ整形VBA – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵:BIツールを唸らせる「リソース稼働データ」の抽出戦略

多くのエンジニアがMicrosoft Project(以下MSP)のデータをExcelに吐き出し、VLOOKUPで繋ぎ合わせる「泥臭い作業」に終止符を打てずにいる。だが、君たちが目指すべきは、そんな場当たり的な集計ではない。BIツール(Power BIやTableau)が最も好む「フラットなデータ構造」を、MSPのオブジェクトモデルから直接叩き出すパイプラインの構築だ。

本稿では、MSPの非効率なデータ構造を解体し、BIツールで分析可能な「真のデータセット」へと変換する、堅牢なVBAアーキテクチャを伝授する。

—

1. なぜ「そのまま」ではいけないのか?

MSPの標準レポートは、プレゼン用には優れているが、データ分析には致命的に不向きだ。階層構造、インデント、計算された合計値……これらはBIツール上で計算メジャーとして定義すべきであり、ソースデータに含めてはならない。

我々が目指すべきは「Factテーブル」の作成だ。

  • リソース名・ID
  • タスク名
  • 期間(開始・終了)
  • 稼働率(単位)
  • コスト

これらを1行1レコードのCSVとして出力する。ここでの設計原則は「加工はVBAで、計算はBIで」だ。

—

2. 堅牢な抽出のためのアーキテクチャ

VBAで書く際、初心者は `ActiveProject.Tasks` を闇雲にループさせる。これはプロジェクトが大規模化した瞬間にフリーズする。
我々が守るべき鉄則は以下の通りだ。

1. Late Bindingの回避とEarly Bindingの活用: 参照設定を正しく行い、IntelliSenseを効かせて型安全を確保する。
2. オブジェクトの解放: ループ内で生成したオブジェクトは必ず `Nothing` で明示的に破棄する。メモリリークは「死」と同義だ。
3. エラーハンドリング: MSP特有の「計算中(Busy)」状態を考慮し、処理をスキップまたはリトライするロジックを組み込む。

—

3. 実装:プロフェッショナルな稼働データ抽出コード

このコードは、リソースの割り当て情報を走査し、BIツールが読み込みやすいフラットなCSVを出力する。

‘ Project VBA: リソース稼働データのフラット抽出用スクリプト
‘ 参照設定: Microsoft Project 16.0 Object Library

Public Sub ExportResourceDataToCSV()
Dim prj As Project
Dim tsk As Task
Dim assn As Assignment
Dim fileNum As Integer
Dim filePath As String

Set prj = ActiveProject
filePath = ThisWorkbook.Path & “\ResourceUsage_” & Format(Now, “yyyyMMdd_HHmm”) & “.csv”
fileNum = FreeFile

‘ ファイル出力の準備
Open filePath For Output As #fileNum
Print #fileNum, “TaskID,TaskName,ResourceName,Start,Finish,Units,Cost”

‘ オンメモリのデータ構造を効率的に走査
On Error Resume Next
For Each tsk In prj.Tasks
If Not tsk Is Nothing Then
If Not tsk.Summary Then ‘ サマリータスクは分析のノイズになるため除外
For Each assn In tsk.Assignments
‘ BIツールへ出力するCSVの生成
Print #fileNum, tsk.ID & “,” & _
“””” & tsk.Name & “””,” & _
“””” & assn.ResourceName & “””,” & _
assn.Start & “,” & _
assn.Finish & “,” & _
assn.Units & “,” & _
assn.Cost
Next assn
End If
End If
Next tsk
On Error GoTo 0

Close #fileNum
MsgBox “抽出完了: ” & filePath, vbInformation
End Sub

—

4. 運用のための極意:バグを生まないために

  • サマリータスクの処理: 多くのエンジニアが「サマリータスク」と「個別タスク」を混同して集計し、数値がダブルカウントされるバグを埋め込む。必ず `If Not tsk.Summary` でフィルタリングすること。
  • タイムゾーンと日付形式: CSV出力時の `Date` 型は、環境によってフォーマットが崩れる。Power BI等に読み込ませる際は、`Format(assn.Start, “yyyy-mm-dd”)` と明示的にISO形式に整形するのが鉄則だ。
  • 巨大プロジェクトへの対応: もしプロジェクトが数千タスクを超える場合は、`Application.Calculation = pjManual` に一時的に設定し、再計算を止めてから走査せよ。パフォーマンスが劇的に向上する。

結論:ツールに振り回されるな

VBAは単なる自動化ツールではない。MSPという「ブラックボックス化しやすい巨大なデータ群」を、現代的な分析基盤に接続するための「データ翻訳機」だ。

今回のコードをベースに、君たちの現場に必要な「カスタムフィールド」を追加し、BIツール上で稼働率ヒートマップやコスト推移を構築してほしい。データが可視化された瞬間、君は「ただの管理者」から「プロジェクトの意思決定者」へと進化するはずだ。

実装で壁にぶつかったら、また戻ってきなさい。次の階層へ引き上げる準備はできている。

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