【実務・中級編】【中級者向け】ベースライン設定時に「設定済みフラグ」をカスタムフィールドに書き込む運用管理 – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理の「暗黙知」を排除せよ:ベースライン設定を自動検知する極限のVBA設計

大規模なプロジェクト管理において、最も恐ろしいのは「ベースラインが引かれているか否か」という状態が、担当者の記憶や属人的な確認に依存している状況だ。

「とりあえず計画を作ったが、ベースラインを保存したかどうか忘れた」
「後から進捗を入力したら、比較基準がズレてしまい分析不能になった」

こうした事故を防ぐためには、システム側で「いつ、誰が、ベースラインを設定したか」を強制的に可視化する仕組みを構築するしかない。今回は、Project VBAを用いてベースライン設定時に自動的にカスタムフィールドへフラグを書き込み、プロジェクトの健全性を担保する堅牢な実装手法を伝授する。

1. なぜ「手動運用」が崩壊するのか

多くの現場が陥る罠は、ベースラインの設定を「一過性の操作」として捉えていることだ。
Project VBAには `Project.SaveBaseline` というメソッドがあるが、これを実行しただけでは、プロジェクトファイルを開いた第三者が「これが現在の正解なのか?」を判定する術がない。

解決策はシンプルだ。「ベースライン保存操作をラップ(包む)し、同時にカスタムフィールドにタイムスタンプを書き込む」というラッパー関数を作る。これにより、データの一貫性を物理的に保証するのだ。

2. 堅牢な設計指針:カスタムフィールドの活用

まず、Projectの「ユーザー設定」フィールド(Text1など)をフラグとして活用する。

  • 設計の要点:
  • `Text1`:ベースライン設定日(YYYY/MM/DD)
  • `Text2`:設定者(ユーザー名)
  • これらをプロジェクトサマリータスク(ID 0)に書き込むことで、プロジェクトファイルを開いた瞬間に状態を把握できるようにする。

3. 実装コード:ベースライン保存ラッパー

このコードは、単にベースラインを保存するだけでなく、メタデータを付与する「プロダクション仕様」である。

‘ ==========================================================
‘ プロジェクトのベースライン設定とメタデータ記録
‘ 開発現場でそのまま使える堅牢なラッパー関数
‘ ==========================================================
Public Sub SetBaselineAndFlag()
Dim proj As Project
Set proj = ActiveProject

On Error GoTo ErrorHandler

‘ 1. ベースラインの保存 (PJBaselineSave)
‘ 汎用性を考慮し、全タスク・全リソースに対して実施
proj.SaveBaseline BaselineType:=pjBaseline, _
CopyAll:=True, _
SetBaselineToSelectedTasks:=False

‘ 2. フラグをカスタムフィールドに書き込み
‘ Project Summary Task (ID 0) を活用してメタデータを保持
With proj.ProjectSummaryTask
.Text1 = Format(Now, “yyyy/mm/dd hh:nn”) ‘ 設定日時
.Text2 = Application.UserName ‘ 実行者名
End With

MsgBox “ベースラインを保存し、管理フラグを更新しました。”, vbInformation

Exit Sub

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

4. プロダクション環境における「落とし穴」と対策

このツールを現場で運用する際、以下の3点に注意しなければならない。

① データベース(SQL Server)連携の注意点

Project Server / Project Onlineで運用している場合、`SaveBaseline` は非同期処理やサーバー側の権限チェックが走る可能性がある。このコードを実行する前に、`Application.CheckOut` が完了しているかを確認するロジックを噛ませるのがプロの作法だ。

② カスタムフィールドの名称変更リスク

`Text1` を直接参照するコードは、ユーザーが「カスタムフィールドのカスタマイズ」でフィールド名を変更した際に破綻する。
解決策: フィールドのインデックス(`pjCustomTaskText1`)を使用し、可能であれば `CustomFieldRename` メソッド等で事前にフィールド名を「Baseline_Date」等に固定しておく運用を推奨する。

③ インターフェースの強制

VBAの標準メニューを使わせず、リボンUIにこのマクロを登録したボタンを配置せよ。開発者が「標準機能」を使わず「このマクロ」を使わざるを得ない環境を構築して初めて、データは「正しく」残る。

結論:管理は「仕組み」に宿る

「ベースラインを引く」という業務を、「ただのボタン押下」から「システムへの記録行為」に昇華させること。これが、大規模プロジェクトにおけるPMOの自動化戦略の第一歩だ。

このコードをベースに、さらに「ベースラインが更新されたらメールを飛ばす」「SharePointのリストにログを吐き出す」といった拡張を行えば、あなたのプロジェクト管理環境は飛躍的に堅牢になるはずだ。

システムを信じるな、システムに「確実な足跡」を残させる設計を信じよ。健闘を祈る。

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