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

スポンサーリンク

プロジェクトの「今」を可視化せよ:Project VBAからXMLを経由したBI連携パイプラインの設計

現場のプロジェクトマネージャーや自動化エンジニアにとって、Microsoft Project(MSP)のデータは「ブラックボックス」になりがちだ。GUIでベースラインを比較して悦に入る時代は終わった。真に管理すべきは、「いつ、どのタスクが、どれだけ計画から乖離したか」という時系列データである。

今回は、MSPのベースラインデータをVBAで抽出し、BIツール(Power BI等)が喜ぶXML形式に整形して自動出力する、堅牢なパイプラインの構築法を伝授する。

1. なぜ「GUI」ではなく「XMLパイプライン」なのか

標準の「ベースラインの保存」や「比較レポート」は、あくまで静止画だ。我々が求めるのは、プロジェクトの進捗をDB化し、傾向分析(トレンド分析)を行うための「構造化データ」である。

VBAで直接プロジェクトオブジェクトを操作する際、最も避けなければならないのは「不必要な再計算のトリガー」だ。MSPのオブジェクトモデルは、プロパティを弄るたびに再計算が走り、大規模プロジェクトでは数秒単位のロスを生む。この設計思想の根幹は、「読み取りは最小限のアクセスで、出力は一括処理」である。

2. 堅牢なデータ抽出のための設計指針

1. 計算モードの制御: `Application.Calculation = pjManual` に設定し、処理中の自動計算を抑制する。
2. XMLのスキーマ設計: BIツール(Power Query)が読み込みやすいよう、階層構造をフラット化(あるいは親IDを持たせたリレーション形式)にする。
3. エラーハンドリング: COMエラーを拾うのは最低限。オブジェクトの存在チェック(`If Not task Is Nothing`)を怠るな。

3. 実装:ベースラインエクスポート・プロシージャ

以下は、現在開いているプロジェクトのベースライン情報を、Power BIがパース可能なXML形式で出力する汎用的なコードだ。

Option Explicit

‘ プロジェクトの全タスクからベースライン情報を抽出しXML出力する
Public Sub ExportBaselineToXML()
Dim proj As Project
Dim tsk As Task
Dim xmlPath As String
Dim fso As Object, ts As Object

Set proj = ActiveProject
xmlPath = Environ(“USERPROFILE”) & “\Desktop\Baseline_Export.xml”

‘ プロジェクト計算を停止し、パフォーマンスを最大化
Application.Calculation = pjManual

Set fso = CreateObject(“Scripting.FileSystemObject”)
Set ts = fso.CreateTextFile(xmlPath, True)

‘ XMLヘッダーとルート要素
ts.WriteLine “
ts.WriteLine “

On Error Resume Next ‘ 予期せぬプロパティ欠落による停止を防ぐ
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
‘ パフォーマンスのため、必要なフィールドのみを連結
ts.WriteLine ”
ts.WriteLine ” ” & tsk.ID & “
ts.WriteLine ” ” & Replace(tsk.Name, “&”, “&”) & “
ts.WriteLine ” ” & tsk.BaselineStart & “
ts.WriteLine ” ” & tsk.BaselineFinish & “
ts.WriteLine ” ” & tsk.BaselineCost & “
ts.WriteLine ”

End If
Next tsk
On Error GoTo 0

ts.WriteLine “”
ts.Close

‘ 設定を元に戻す
Application.Calculation = pjAutomatic

MsgBox “エクスポート完了: ” & xmlPath, vbInformation
End Sub

4. プロダクション環境への導入アドバイス

XMLとBIツールの連携(Power BI側)

Power BIの「データの取得」から「XML」を選択し、生成したファイルを読み込めば、Power Queryが自動的にテーブル構造を認識する。

  • ポイント: `BaselineStart` や `BaselineFinish` は読み込み時に必ず「日付型」に変換すること。
  • 差分分析: このXMLを日次で保存(ファイル名に日付を付与)し、Power BIで「フォルダ接続」すれば、簡単にベースラインの推移グラフが完成する。

運用上の注意点

  • ファイルロック: 他のユーザーがProjectを開いている場合、排他制御でVBAが止まる可能性がある。読み取り専用で開くか、共有フォルダ上の運用フローを厳格化せよ。
  • 大規模データ: タスク数が数万件を超える場合、`ts.WriteLine` を逐次行うとメモリ負荷がかかる。一度コレクションや配列に格納してからバッファ書き込みを行う設計へ変更すべきだ。

結びに代えて:エンジニアの責務

自動化ツールは「作って終わり」ではない。このパイプラインを導入することで、現場のメンバーが「なぜ計画から遅延しているのか」を定量的かつ客観的に語れるようになることが真のゴールだ。

VBAは、今やレガシーな言語と揶揄されることもある。しかし、Projectという巨大なCOMサーバーの深淵に触れ、データを自在に操る力は、DXの本質を知る者にとって最強の武器となる。

このコードを叩き台に、君たちの現場の「透明性」を飛躍的に向上させてほしい。健闘を祈る。

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