【実務・中級編】Project VBAでリソースの「稼働率」を監視し、予実乖離を早期発見するダッシュボード – Project VBA解析バイブル

スポンサーリンク

MS Project VBAで実現する「稼働率予実管理」:Excel脱却のその先へ

プロジェクトマネジメントにおいて、最も恐ろしいのは「見えない遅延」だ。
週次報告で「順調です」と言っていたリソースが、実は昨日からキャパシティを超えていた――。この予実の乖離を早期に検知できないPMは、プロジェクトを沈没させる。

今回は、MS Projectの強力なオブジェクトモデルを叩き、「リソースの稼働率(Work vs Actual Work)」を抽出し、予実乖離を即座に視覚化するダッシュボード構築術を伝授する。

1. なぜ「Excel転記」ではダメなのか

多くの現場が、Projectからデータを手動でExcelにエクスポートし、VLOOKUPで集計している。だが、それは「静止画」を見ているに過ぎない。
真の自動化エンジニアが目指すべきは、Projectのタスク・リソース基盤から直接「現在の歪み」を吸い上げるパイプラインだ。

堅牢な設計のための3つの鉄則

1. オブジェクトをキャッシュせよ: `ActiveProject.Resources`を何度もループさせてはならない。メモリへのアクセス負荷を最小限に抑えるのが鉄則だ。
2. 計算はVBA側で完結させよ: Project内での計算結果をExcelのセルに流し込む際、中間データを介在させるとファイル破損のリスクが高まる。
3. 例外処理の徹底: リソースが割り当てられていないタスクや、実績入力が未完了のケースを想定した`On Error Resume Next`の適切なスコープ管理が命綱となる。

—

2. 実践:稼働率抽出マクロ(Production-Ready Code)

このコードは、Projectの各リソースに対し、予定工数(Work)と実績工数(Actual Work)を比較し、超過率(乖離率)を算出するコアロジックだ。

‘ プロジェクト内の全リソースの稼働状況をイミディエイトウィンドウに出力する(ダッシュボードのデータソースとして活用)
Sub ExportResourceUtilization()
Dim res As Resource
Dim variance As Double
Dim workVal As Double, actualVal As Double

‘ プロセス効率化:画面更新を停止して処理速度を最大化
Application.ScreenUpdating = False

Debug.Print “ResourceName,Work,ActualWork,VarianceRate”

For Each res In ActiveProject.Resources
‘ リソースが割り当てられていない場合はスキップ
If Not res Is Nothing Then
‘ 予定工数と実績工数を取得(単位:時間)
workVal = res.Work / 60
actualVal = res.ActualWork / 60

‘ 予実乖離の算出(0除算回避)
If workVal > 0 Then
variance = (actualVal – workVal) / workVal
Else
variance = 0
End If

‘ CSV形式で出力(これを外部ファイルやExcelへ流し込む)
Debug.Print res.Name & “,” & workVal & “,” & actualVal & “,” & Format(variance, “0.00%”)
End If
Next res

Application.ScreenUpdating = True
MsgBox “稼働率解析データの抽出が完了しました。”, vbInformation
End Sub

—

3. ダッシュボードへの統合:注意すべき「罠」

このコードで出力したデータをPower BIやExcelのピボットテーブルに渡す際、以下の点に注意せよ。

  • タイムスライスデータの罠: `res.Work`は累積値である。時系列の変化を見るには、`res.TimeScaleData`メソッドを用い、週単位または日単位でデータをスライスする必要がある。これにはかなりの計算コストがかかるため、「更新頻度」を業務フローとして定義せよ。
  • ファイルロックの回避: プロジェクトファイルとレポート用Excelを別々に管理する場合、ADO(ActiveX Data Objects)を用いて、ProjectからExcelへ直接書き込む構成が最も堅牢だ。これにより、Excelファイルを「開く」という操作から解放される。

4. 伝説のエンジニアからの提言

コードは動けばいいのではない。「誰がいつ見ても、プロジェクトの健康状態が0.5秒で判断できる」ようにすることがエンジニアの責務だ。

今回紹介したロジックをベースに、リソースの乖離率が20%を超えた場合に自動でTeamsやSlackにアラートを飛ばす拡張機能を追加してほしい。それができれば、君のプロジェクトから「炎上」という言葉は消滅するはずだ。

自動化とは、単なる作業の省略ではない。「管理者の視界をクリアにするための投資」である。今日から、このコードと共にプロジェクトの深淵を覗き込んでみてくれ。

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