プロジェクト計画の再定義:ベースラインの「クリーンアップ」を自動化する極意
こんにちは。現場で泥臭い自動化と格闘し続けてきた諸君、ようこそ。
マクロの記録ボタンを押して生成された、冗長で意味不明なコードを見て絶望したことはないかな? プロジェクト管理において「ベースライン」は命綱だ。しかし、計画が大きく変わるたびに、手動で古いベースラインを消し、新しい値を設定する……。そんな作業に貴重な時間を溶かすのはもう終わりにしよう。
今日は、Project VBAの真髄である「オブジェクトのライフサイクル」を意識しつつ、ベースラインのクリーンアップを自動化する最強のメソッドを伝授する。
—
1. ベースラインとは何か?:VBAで扱う「概念」の理解
Projectにおいてベースラインとは、単なる「数値のコピー」ではない。各タスクが持つ開始日・終了日・コスト・作業時間を、特定の名前付きスロットに凍結保存する行為だ。
VBAでこれを扱う際、最も陥りやすい罠は「既に設定されているベースラインを無視して上書きしようとする」ことだ。ProjectのAPIは、既存データがある状態で無理やり上書きしようとすると、往々にして挙動が不安定になる。
鉄則: 計画変更時は「一旦消す(Clear)」→「保存する(Save)」というクリーンな手順を踏むこと。これがシステム障害を防ぐ唯一の道だ。
—
2. 実装コード:ベースライン再設定の自動化
以下のコードは、アクティブなプロジェクトのベースライン0をクリアし、現在の最新計画をベースライン0として再保存するスクリプトだ。
Sub RefreshBaseline()
‘ プロジェクトオブジェクトの取得
Dim proj As Project
Set proj = ActiveProject
‘ エラーハンドリングは自動化の要
On Error GoTo ErrorHandler
‘ 1. 既存のベースライン0をクリア
‘ ClearBaseline メソッドの第一引数:ベースライン番号(0=ベースライン, 1~10=ベースライン1~10)
‘ 第二引数:クリアする範囲(False=全タスク)
proj.ClearBaseline pjBaseline0, False
‘ 2. 現在の計画をベースライン0として保存
‘ SaveBaseline メソッドの第一引数:ベースライン番号
‘ 第二引数:全タスクを対象にするか(True=全タスク)
proj.SaveBaseline pjBaseline0, True
MsgBox “ベースラインの更新が完了しました。”, vbInformation
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
—
3. コードの解説:なぜこの記述が必要なのか?
初心者が陥りやすいポイントを、先輩エンジニアの視点で解説しよう。
① `ActiveProject` の活用
VBAにおいて「今開いているファイル」を指し示すのは `ActiveProject` だ。しかし、大規模開発では `Projects(“Project1.mpp”)` のように明示的に指定することを推奨する。なぜなら、ユーザーが裏で別のファイルを開いた瞬間に、意図しないファイルが更新される事故を防ぐためだ。
② `pjBaseline0` という定数
VBAには「列挙型(Enum)」という非常に便利な仕組みがある。`pjBaseline0` と書くだけで、システム内部のIDを気にせず直感的に操作できる。これを手打ちの数値にするのはナンセンスだ。
③ `On Error GoTo` の重要性
プロジェクトが読み取り専用で開かれている場合、`SaveBaseline` は例外を投げる。このエラーを放置すると、マクロが強制終了し、ファイルが中途半端な状態で残る。必ずエラーハンドラを通し、安全に終了させるのがプロの作法だ。
—
4. ステップアップ:現場で役立つ「応用テクニック」
コードが動くようになったら、次は以下の視点を取り入れてほしい。
- 全ベースラインのクリア: `pjBaseline0` から `pjBaseline10` までループで回せば、全ての過去記録をリセットできる。
- 特定のタスクだけ保存: `True` になっている引数を `False` に変え、選択中のタスクのみをベースライン化することも可能だ。これは「サブプロジェクトの一部だけ計画修正したい」という現場のワガママに応える強力な武器になる。
—
最後に:自動化は「思考の整理」から始まる
ベースラインを自動化するということは、「どの計画が正当な基準なのか」というプロジェクトマネジメントの定義を明確にするということだ。
プログラムは、君たちが考えている以上に素直だ。曖昧なルールで書けば曖昧な結果を返し、厳格なルールで書けば、どんなに巨大なプロジェクトでも完璧に管理してくれる。
まずはこのコードをコピーして、自分の環境で動かしてみること。そして、なぜ動いたのか、どこでエラーが起きそうかを想像してみよう。その一歩が、君をただの「マクロ実行者」から「自動化エンジニア」へと進化させるはずだ。
また困ったことがあればいつでも聞きに来てくれ。君の自動化ライフを応援しているよ。
