【実務・中級編】リソースの稼働率をグラフ化してボトルネックを特定するプロ向け手法 – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌中に収める:リソース稼働率の「真実」を可視化するアーキテクチャ

多くのエンジニアが陥る罠がある。「Projectの画面を見れば稼働状況はわかる」という慢心だ。だが、マネジメントの現場で求められるのは、単なるビューの表示ではない。「どのリソースが、いつ、どの程度過負荷(オーバーアロケーション)に陥り、プロジェクト全体のボトルネックとなっているか」を、定量的かつ予兆的に把握することだ。

今回は、Project VBAの深淵に触れ、リソースの稼働データを外部システム(Excel/Python)へ安全に抽出・可視化するための「プロの設計思想」を伝授する。

—

1. なぜ「手作業」や「単純なマクロ」では失敗するのか

Projectの`ResourceUsageView`は、単なる表ではない。タイムスケールに従って動的に計算される「時系列データ」の集合体だ。これをVBAで扱う際、多くの開発者が犯す過ちは以下の2点に集約される。

1. オブジェクトの直接参照によるパフォーマンス低下: `Assignment`オブジェクトをループ内で何度も叩けば、数千行のプロジェクトでは数分のフリーズを招く。
2. 計算の不一致: Projectの「平準化」ロジックと、VBAで再計算した値の間にギャップが生じ、データが整合しなくなる。

結論: VBAは「データの抽出・成形」に徹し、計算と可視化は分離せよ。これが保守性を担保する唯一の道だ。

—

2. 堅牢なデータ抽出ロジック(プロダクション・コード)

Projectから稼働データを抜き出す際、最も効率的なのは`TimeScaleData`メソッドを使用することだ。このメソッドは、指定期間内のリソース割り当て状況を配列として一括取得できる。

以下のコードは、リソースごとの「日次稼働時間」を抽出し、Excelへ転送するための堅牢なテンプレートだ。

‘ ———————————————————
‘ リソース稼働データを抽出し、Excelへ書き出すエンジン
‘ ———————————————————
Sub ExportResourceUsageToExcel()
Dim proj As Project: Set proj = ActiveProject
Dim res As Resource
Dim ts As TimeScaleValues
Dim i As Long

‘ 出力用シートの初期化(高速化のため画面更新停止)
Application.ScreenUpdating = False

‘ 対象期間を定義(例:本日より30日間)
Dim startDate As Date: startDate = Date
Dim endDate As Date: endDate = Date + 30

‘ 各リソースをループ
For Each res In proj.Resources
If Not res Is Nothing Then
‘ リソースの稼働データを取得(pjResourceTimescaledWork)
Set ts = res.TimeScaleData(startDate, endDate, pjResourceTimescaledWork, pjTimescaleDays)

‘ ここで配列を処理し、Excelへ書き出す
‘ 実務ではここで配列を一気にセルへ放り込むのが鉄則
Call WriteToBuffer(res.Name, ts)
End If
Next res

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

‘ ———————————————————
‘ 書き込みのボトルネックを解消するバッファ処理
‘ ———————————————————
Private Sub WriteToBuffer(resName As String, ts As TimeScaleValues)
‘ 実際にはここで配列処理を行い、Range(“A1”).Value = dataArray
‘ のように一括転送することで、Excel側での描画コストを最小化する
End Sub

—

3. ボトルネックを特定するための可視化戦略

抽出したデータは、そのままExcelのグラフにするのではなく、「ヒートマップ」として可視化することを強く推奨する。

  • 100%以上の稼働(オーバーアロケーション): 濃い赤色
  • 80%〜100%の稼働: 黄色(予備能力なし)
  • 80%未満: 緑色

プロの運用ルール:

1. データソースの分離: Projectファイルを直接いじらせない。VBAで抽出したCSV/JSONをExcelの「Power Query」で読み込む設計にする。
2. 期間の可変性: 稼働データは「スナップショット」として保存する。先週のボトルネックと今週のボトルネックを比較できなければ、それはマネジメントではない。
3. Python連携の可能性: もしデータが数万件を超えるなら、Pythonの`pandas`ライブラリへCSVを渡し、`seaborn`でヒートマップを生成せよ。VBAでグラフを描画するのは、現代のアーキテクチャでは非効率の極みだ。

—

4. 最後に:エンジニアとしての矜持

この手法を導入すれば、プロジェクトマネージャーの「なんとなく忙しそう」という直感を、「リソースAは来週水曜日に120%の負荷に達し、クリティカルパスを阻害する」という科学的根拠へと昇華させることができる。

コードはあくまで「目的」を達成するための手段だ。あなたの書いたコードが、誰かの残業を減らし、プロジェクトを成功に導くための「羅針盤」になることを願っている。

次にあなたが構築すべきは、単なるツールではない。「プロジェクトの健全性を可視化するインフラ」である。挑戦を期待する。

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