【実務・中級編】【中級者向け】ベースラインの「中間計画」を特定のタスクグループのみに適用する部分更新マクロ – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「正気」を保つ技術:ベースラインの部分更新という解法

プロジェクト管理において、「ベースライン」は聖域である。だが、現実のプロジェクトは生き物だ。フェーズが切り替わるたびにプロジェクト全体を再ベースライン化すれば、過去の進捗実績(Work/Cost)との乖離がブラックボックス化し、リカバリー不能なデータ不整合を引き起こす。

「一部のタスク群だけを修正したい」「特定のマイルストーン以降だけを再計画したい」。この現場の切実な要求に対し、MS ProjectのGUIはあまりに無力だ。今日は、Project VBAを駆使して、特定のタスクグループのみを狙い撃ちでベースライン保存する「部分更新アーキテクチャ」を伝授する。

なぜ「全体保存」は悪手なのか

MS Projectの標準機能でベースラインを保存すると、プロジェクトファイル内の全タスクの `BaselineStart` 等が上書きされる。これはデータ解析の観点から見て致命的だ。

  • 比較対象の喪失: 実績データとの差異分析ができなくなる。
  • 履歴の断絶: どの段階で計画変更が起きたかのトレーサビリティが消える。

我々が目指すべきは、「既存のベースラインを尊重しつつ、特定のタスク群にのみ、新たな計画値を注入する」という外科手術のようなアプローチである。

極限の設計思想:なぜこのコードでなければならないのか

単に `Task.BaselineSave` を呼び出すだけでは素人だ。以下の点に留意せよ。

1. オブジェクトの排他制御: `ActiveProject.Tasks` を走査する際、コレクションを直接触りすぎるとメモリリークやカーソル制御の不整合を招く。
2. フラグによるフィルタリング: 構造的にWBSを辿るのではなく、カスタムフィールド(Flag1等)をトリガーにする。これが最も堅牢だ。
3. エラーハンドリング: ユーザーが選択したタスクがサブプロジェクトを含む場合、ベースライン保存は失敗する。ここを握り潰さないコードが必要だ。

実装コード:PartialBaselineUpdater

以下のコードは、`Flag1` が `True` になっているタスクのみを、指定のベースライン(例:Baseline1)に保存する。

Option Explicit

‘ ———————————————————
‘ @Title: 特定タスク群への部分ベースライン更新エンジン
‘ @Description: Flag1がTrueのタスクのみを対象にベースラインを保存する
‘ ———————————————————
Public Sub SavePartialBaseline()
Dim tsk As Task
Dim proj As Project
Set proj = ActiveProject

‘ 1. プロジェクトの保護モードを確認
If proj.ReadOnly Then
MsgBox “ファイルが読み取り専用です。保存できません。”, vbCritical
Exit Sub
End If

On Error GoTo ErrorHandler

‘ 2. フラグが立ったタスクを一時的に選択状態にする(APIの仕様上、選択範囲に対する操作が最も安定する)
SelectAll
‘ ※一旦選択を解除して、対象タスクのみを選択し直す
FilterEdit Name:=”Flag1_Only”, TaskFilter:=True, Create:=True, OverwriteExisting:=True, _
FieldName:=”Flag1″, Test:=”equals”, Value:=”はい”
FilterApply Name:=”Flag1_Only”

‘ 3. 選択範囲に対してベースラインを保存
‘ pjBaseline1 を指定。必要に応じて引数を変更すること
‘ SetBaseLineToSelectedTasks は標準機能にないため、
‘ 全体ベースラインの「選択したタスクのみ」オプションをエミュレートする
Application.BaselineSave All:=False, Copy:=False, _
Into:=pjBaseline1, _
RollupToSummaryTasks:=True, _
ShowInMenu:=True

MsgBox “ベースラインの更新が完了しました。”, vbInformation

Exit Sub

ErrorHandler:
MsgBox “予期せぬエラー: ” & Err.Description, vbCritical
End Sub

運用の極意:データベース連携の注意点

このツールを導入する上で、一つだけ警告しておく。
「ベースラインの履歴をどこで管理するか」という問題だ。

MS Projectのファイル自体にベースラインを詰め込みすぎると、ファイルサイズが肥大化し、計算ロジックが遅延する。もしあなたが大規模プロジェクトのPMOであれば、以下の運用を推奨する。

  • スナップショット運用の徹底: ベースラインを更新する直前に、必ず `SaveAs` でバックアップファイルを作成するスクリプトを上記VBAの先頭に組み込むこと。
  • カスタムフィールドへの退避: 計画変更の履歴(誰が、いつ、なぜ変更したか)を `Text1`~`Text5` などのカスタムフィールドに記録する仕組みを、このVBAと連動させること。

結論

自動化とは、単にマウス操作を代替することではない。「プロジェクトの整合性を維持するための制約を、コードで表現すること」である。

今回紹介した部分更新のロジックは、地味だが非常に強力だ。現場のPMが「計画変更のたびに全データが壊れる」という恐怖から解放され、より本質的な「進捗の予兆管理」にリソースを割けるようになる。

さあ、あなたのプロジェクトファイルを、意志のあるデータへと作り変えてほしい。健闘を祈る。

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