【実務・中級編】Project VBAによる「リソース平準化」の自動実行と結果の検証レポート作成 – Project VBA解析バイブル

スポンサーリンク

プロジェクトマネジメントをコードで制す:リソース平準化の完全自動化と「真の検証」

現場のPMが最も恐れるのは、リソースの過負荷(オーバーアロケーション)を放置したまま進捗報告を行い、プロジェクトが崩壊することだ。MS ProjectのGUIで「平準化」ボタンをポチポチ押す作業は、もはやエンジニアの仕事ではない。

今日は、MS Projectのオブジェクトモデルを掌握し、平準化の実行から「結果の正当性検証」までを自動化する、堅牢なアーキテクチャを伝授する。

1. なぜ「Leveling」はブラックボックスであってはならないのか

多くの開発者が陥る罠は、`Application.LevelResources` メソッドを呼んで終わりにしてしまうことだ。だが、自動化の本質は「実行」ではなく「結果の判定」にある。

平準化は、プロジェクトのスケジュールを物理的に書き換える破壊的な操作だ。これを制御するには、`LevelingOptions` を明示的に定義し、実行前後のリソース負荷状況を比較する「検証プロセス」をパイプラインに組み込む必要がある。

堅牢な設計の要点

  • 状態の保存: 平準化前後のスケジュールを比較できるよう、実行前にスナップショット(ベースラインや一時的なCSV出力)を検討せよ。
  • 冪等性の担保: 複数回実行してもプロジェクトが壊れないよう、平準化の範囲(選択したタスクのみ or 全体)を明確に指定する。
  • 検証ログ: 単に「成功した」というGUIメッセージを信じるな。`Resource.Overallocated` プロパティを走査し、システムが本当に過負荷を解消したかを数値で証明せよ。

2. 実装:Production-Grade平準化自動化コード

このコードは、平準化を実行し、その後にリソースの過負荷が残っていないかをチェックする検証ロジックを統合したものだ。

Option Explicit

”’

”’ リソース平準化の実行と過負荷検証を行うメインプロシージャ
”’

Public Sub ExecuteAndVerifyLeveling()
Dim proj As Project
Set proj = ActiveProject

‘ 1. 平準化設定の最適化
‘ 自動平準化をオフにし、手動制御を徹底する
proj.LevelingOptions.LevelingOrder = pjLevelStandard
proj.LevelingOptions.ClearLevelingValues = True ‘ 以前の平準化結果をリセット
proj.LevelingOptions.AutoLevel = False

On Error GoTo ErrorHandler

‘ 2. 平準化の実行
Debug.Print “平準化処理を開始します…”
proj.LevelResources

‘ 3. 検証フェーズ:過負荷リソースの走査
Dim res As Resource
Dim overAllocatedCount As Long
overAllocatedCount = 0

For Each res In proj.Resources
If Not res Is Nothing Then
‘ リソースが過負荷状態かを確認
If res.Overallocated Then
overAllocatedCount = overAllocatedCount + 1
Debug.Print “【警告】リソース過負荷が残存: ” & res.Name
End If
End If
Next res

‘ 4. レポート出力
If overAllocatedCount = 0 Then
MsgBox “平準化完了:全ての過負荷が解消されました。”, vbInformation
Else
MsgBox “警告:平準化後も ” & overAllocatedCount & ” 件の過負荷が残っています。”, vbCritical
End If

Exit Sub

ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub

3. 実務で「刺される」ポイント:外部連携の罠

このツールを業務に組み込む際、以下の2点に注意しなければ、夜中にアラートメールが飛ぶことになる。

① 大規模プロジェクトでのパフォーマンス

`For Each` ループは非常に強力だが、数千タスク規模のプロジェクトでは、リソースの走査に時間がかかる。`Application.ScreenUpdating = False` を利用して再描画を抑制するだけで、実行速度は数倍変わる。

② データベース(SQL Server / Project Online)との同期

Project ServerやPWA環境で運用する場合、ローカルのVBA実行とサーバー側のキュー処理にはラグがある。`Application.QueueTask` 等の非同期処理が必要な場合は、平準化実行後に必ず `Application.CalculateAll` を呼び出し、再計算を強制する癖をつけろ。

結論:エンジニアの責務とは

平準化ツールを作ることの目的は、楽をすることではない。「プロジェクトの整合性をプログラムで担保すること」だ。

平準化は、場合によっては「解決不能」な過負荷を無視することもある。コード内でその残滓を検出し、即座にログに吐き出すことで、PMは「平準化すればなんとかなるはず」という甘い幻想から解放される。

次にあなたが書くべきは、このコードを実行し、その結果をExcelレポートとして自動生成し、チームのチャットツールに通知するボットだ。エンジニアリングとは、常にその先にあるべきだ。

さあ、GUIから卒業し、コードでプロジェクトを支配せよ。

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