【テクニカル・上級編】【上級者向け】ベースラインの差分をXML形式でエクスポートし、BIツールで可視化する自動パイプライン – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:ベースラインXML抽出による「見えない進捗」の可視化パイプライン

Projectのプロジェクトファイル(.mpp)は、ブラックボックスだ。
GUIでベースラインを確認するだけの日々は、今日で終わりにする。シニアエンジニアならば、プロジェクトの「過去(ベースライン)」と「現在(実績)」の乖離を、データとして抽出し、BIツールで多次元分析する基盤を構築せねばならない。

本稿では、VBAを用いてProjectからベースラインデータをXMLへ掃き出し、それを外部システムが消費可能な形式へ昇華させる、極限の自動化パイプラインを解説する。

1. なぜ「XMLエクスポート」なのか

Projectのオブジェクトモデルを直接Power BIに接続するのは自殺行為だ。複雑な階層構造と、計算によって動的に変化する`Task`オブジェクトを直接叩けば、メモリリークとパフォーマンス低下は免れない。

我々が取るべき戦略は「静的スナップショット」だ。
Projectの情報をXMLという中間言語に変換し、それをBI側のETL処理へ渡す。この疎結合な設計こそが、大規模プロジェクトの保守性を担保する唯一の解である。

2. 実装の要諦:オブジェクト管理の作法

VBAにおける最大の敵は、`Project`オブジェクトや`Task`コレクションの開放忘れによるメモリの断片化だ。

実装のポイント

  • Late Bindingの活用: 異なるProjectバージョン間での互換性を維持するため、`CreateObject`を使用する。
  • 明示的解放: `Set Object = Nothing`は儀式ではない。循環参照を防ぐための必須の作法だ。
  • XML DOMの利用: `MSXML2.DOMDocument`を用いて、スキーマに準拠したXMLを構築する。

3. 自動化パイプライン:VBAコード実装

以下のコードは、アクティブなProjectからベースライン情報を抽出し、ファイルシステムへXMLを書き出すプロトタイプだ。

‘ 必要な参照設定: Microsoft XML, v6.0
Option Explicit

Public Sub ExportBaselineToXML()
Dim proj As Object
Dim tsk As Object
Dim xmlDoc As MSXML2.DOMDocument60
Dim root As MSXML2.IXMLDOMElement
Dim taskNode As MSXML2.IXMLDOMElement

Set proj = Application.ActiveProject
Set xmlDoc = New MSXML2.DOMDocument60

‘ ルート要素の作成
Set root = xmlDoc.createElement(“ProjectBaseline”)
xmlDoc.appendChild root

‘ タスクごとのベースラインを抽出
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
Set taskNode = xmlDoc.createElement(“Task”)
taskNode.setAttribute “UID”, tsk.UniqueID
taskNode.setAttribute “Name”, tsk.Name

‘ ベースライン(BaselineStart/Finish)の取得
‘ ※NULL値チェックは必須。プロジェクト未設定タスクでエラーを吐く
taskNode.setAttribute “BL_Start”, IIf(tsk.BaselineStart = “NA”, “”, tsk.BaselineStart)
taskNode.setAttribute “BL_Finish”, IIf(tsk.BaselineFinish = “NA”, “”, tsk.BaselineFinish)

root.appendChild taskNode
End If
Next tsk

‘ ファイル保存とメモリの完全開放
xmlDoc.Save Environ(“USERPROFILE”) & “\Desktop\ProjectBaseline.xml”

Set taskNode = Nothing
Set root = Nothing
Set xmlDoc = Nothing
Set proj = Nothing

MsgBox “ベースラインの抽出が完了しました。”, vbInformation
End Sub

4. BIツールへの橋渡し:アーキテクチャの完成

抽出したXMLは、Power BIの「XMLコネクタ」で読み込むことができる。ここで重要なのは、「いつ抽出するか」の自動化だ。

システム管理者のためのヒント

  • Application_ProjectBeforeSaveイベント: ファイル保存時に自動的にこのVBAを実行させることで、常に「保存時点のベースライン状態」をBI側に同期できる。
  • 差分分析: BI側(Power Query)で、前回保存時のXMLと今回のXMLを`Join`し、開始日が「何日ずれたか」を計算するカラムを追加せよ。これが「プロジェクトの遅延予兆検知」の正体だ。

5. 伝説のアーキテクトからの忠告

この手法を導入する上で、最も警戒すべきは「計算フィールドの罠」だ。Projectは動的に値を再計算する。VBAで抽出する際は、必ず`Application.CalculateAll`を呼び出し、計算の不整合を解消してからエクスポートするルーチンを組み込むこと。

技術は常に進化するが、メモリを枯渇させず、確実にデータを整合させるというエンジニアの責務は変わらない。
諸君のプロジェクトが、可視化によって強固なものとなることを期待する。

「計測できないものは、管理できない。」

この言葉を胸に、今日もコードを書き続けろ。

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