【実務・中級編】【中級者向け】ベースラインのクリアと再設定:計画変更時のクリーンアップ自動化 – Project VBA解析バイブル

スポンサーリンク

【Project VBA極意】計画変更の墓場を掃除せよ:ベースライン再設定の自動化と堅牢な設計

プロジェクトマネジメントにおいて「計画の全面見直し」は避けて通れない修羅場だ。多くのエンジニアが犯すミスは、旧来のベースラインを放置したまま新しい計画を上書きし、ガントチャートをカオスな状態に放置することである。

プロジェクトファイルが「なぜか重い」「計算がおかしい」と感じたことはないか? それは、不要なベースラインデータが肥大化し、メモリと演算リソースを食いつぶしているからだ。

今日は、Project VBAを駆使して、古いベースラインを確実に掃討し、最新の計画をクリーンな状態で刻み込むための「堅牢な自動化ロジック」を伝授する。

1. なぜ「手動操作」が命取りになるのか

GUI上でのベースライン設定は、一見簡単に見える。しかし、以下の理由から大規模プロジェクトでは推奨されない。

  • 人為的ミスの温床: 複数のベースライン(B1〜B10)を個別にクリアし忘れる、あるいは誤った値を参照するリスク。
  • 計算のオーバーヘッド: プロジェクトのタスク数が数千を超える場合、UIを通じた設定変更はバックグラウンドの再計算を何度もトリガーし、極めて非効率。
  • データの整合性: ベースラインのクリアと再設定をアトミック(不可分)に行わないと、プロジェクトの状態が「中途半端な履歴」を保持することになり、後にEVM(出来高管理)の分析で致命的なバグを生む。

2. 堅牢な設計へのアプローチ:クリーンアップ・ロジック

今回実装するコードの設計思想は、「全破壊」と「全再構築」だ。

1. Safety Check: プロジェクトが読み取り専用でないか、計算モードが手動になっていないかを確認。
2. Clear Baseline: `BaselineClear`メソッドを使用し、全ベースラインを確実に初期化する。
3. Snapshot: 最新のタスク情報をベースラインにコピーする。
4. Verification: 再設定後にエラーが発生していないかを確認。

3. 【プロダクションコード】ベースライン完全更新スクリプト

このコードは、エラーハンドリングを標準搭載した実運用レベルのモジュールである。モジュールに貼り付けてそのまま使用できる。

Option Explicit

‘ ———————————————————
‘ ベースラインをクリアし、最新計画を再設定する堅牢なルーチン
‘ ———————————————————
Public Sub ResetBaselineToCurrentPlan()
Dim proj As Project
Set proj = ActiveProject

‘ 1. 安全確認: 読み取り専用ファイルではないか
If proj.ReadOnly Then
MsgBox “プロジェクトが読み取り専用です。保存権限を確認してください。”, vbCritical
Exit Sub
End If

‘ 2. エラーハンドリングの開始
On Error GoTo ErrorHandler

‘ プロジェクトの再計算を一時的に停止してパフォーマンスを向上
Application.Calculation = pjManual

‘ 3. 全ベースラインのクリア
‘ PjBaselineClearType.pjBaselineClearAll で全てのベースラインをリセット
proj.BaselineClear PjBaselineClearType.pjBaselineClearAll

‘ 4. 現在の計画をベースライン0に保存
‘ pjBaselineSaveAll: 全タスク、全リソースを対象に
‘ pjBaselineClearType.pjBaselineClearAll: 上書き前に一度クリアを確実にする
proj.BaselineSave AllProjects:=False, _
CopyBaselineToBaseline:=pjBaselineSaveCurrent, _
SetBaselineToCurrent:=True, _
RollupToSummaryTasks:=True, _
RollupFromSubtasks:=True

‘ 再計算の有効化
Application.Calculation = pjAutomatic

MsgBox “ベースラインの再設定が完了しました。”, vbInformation
Exit Sub

ErrorHandler:
Application.Calculation = pjAutomatic
MsgBox “致命的なエラーが発生しました: ” & Err.Description, vbCritical
End Sub

4. プロフェッショナルが教える運用の注意点

ファイルの肥大化を防ぐ

プロジェクトファイルを保存する際、VBAで`FileSave`を呼ぶ前に、`proj.ProjectSummaryInfo.Title`などのプロパティを更新しておくと、バージョン管理が容易になる。また、ベースラインを頻繁にクリア・再設定する場合は、ファイルを一度「XML形式」で保存して開き直すと、隠れたゴミデータがクリーンアップされるため、動作が劇的に軽くなることを覚えておいてほしい。

データベース連携の罠

Project ServerやPWAと連携している場合、ローカルのVBA操作がサーバーの同期プロセスと衝突することがある。ネットワーク環境下で運用する場合は、`Application.CheckOut`と`Application.CheckIn`をコードの先頭と末尾に挟み、排他制御を確実に実装すること。

最後に:自動化の真髄

「コードを書いて終わり」にするのがアマチュアだ。真のエンジニアは、このルーチンを何回実行してもプロジェクトの状態が崩れないこと(冪等性)を保証する。

今回提供したスクリプトは、あなたのプロジェクトから「手作業の不確実性」を排除する強力な武器になるはずだ。このコードをベースに、各組織のフェーズ管理ルールに合わせてカスタマイズしてほしい。

システムが複雑になればなるほど、シンプルで「再実行可能」な自動化コードだけが、プロジェクトを救う。さあ、今すぐ不要なベースラインを掃除し、クリーンな計画で次なるフェーズへ進もう。

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