【入門編】Projectの「ベースライン」をVBAで一括管理する:計画変更時の差分比較を自動化する – Project VBA解析バイブル

スポンサーリンク

【Project VBA】計画変更を可視化せよ!ベースライン一括管理でプロジェクトの「真実」を記録する方法

こんにちは。業務自動化の深淵へようこそ。
Project VBAの世界へ足を踏み入れたあなたに、一つだけ確かなことをお伝えします。

「計画は必ず変わる。だが、その記録を残さないエンジニアは二流だ。」

プロジェクトマネジメントにおいて、ベースライン(計画値)は聖域です。しかし、度重なる変更の中で「いつ、なぜ計画が変わったのか」を追えなくなることは、現場では日常茶飯事。今回は、VBAを使ってこのベースラインをスマートに制御し、変更履歴をログとして資産化する「極限の管理手法」を伝授します。

—

1. Project VBAの「地図」を頭に刻む

コードを書く前に、Projectのオブジェクトモデルを直感的に理解しましょう。

  • Application: プロジェクト全体を統括する神。
  • ActiveProject: 今あなたが開いている現場そのもの。
  • Task: 作業の最小単位。ここに開始日や終了日という「現実」と「計画」が詰まっています。

ベースラインの操作は `ActiveProject.SaveBaseline` メソッド一つで完結しますが、ここからがプロの腕の見せ所。単に保存するだけでなく、「いつ」「どのベースラインを」「なぜ」操作したのかを、VBAで外部ログに書き出す仕組みを作ります。

—

2. 実践:ベースライン管理ツールを構築する

まずは、ベースラインを保存し、その操作をExcelやテキストファイルへ記録するコードを見てみましょう。

Sub SaveBaselineWithLog()
Dim proj As Project
Set proj = ActiveProject

‘ 1. ベースラインの保存 (ベースライン0番を保存)
‘ CopyBaseline: 計画値(Current)をベースラインへコピーする処理
proj.SaveBaseline BaselineNumber:=pjBaseline0

‘ 2. ログを残す(簡単なイミディエイトウィンドウへの出力例)
‘ 実務ではここをFileSystemObjectでテキスト追記処理に書き換えてください
Debug.Print “【Baseline Update】 ” & Now & ” – プロジェクト名: ” & proj.Name

MsgBox “ベースラインの保存と記録が完了しました。”, vbInformation
End Sub

なぜこれが重要なのか?

「マクロの記録」に頼る初心者は、`SaveBaseline` を実行して終わりです。しかし、真のエンジニアは「操作の副作用」を考慮します。

  • ポイント: `pjBaseline0` から `pjBaseline10` までの番号をどう使い分けるか。通常、`pjBaseline0` は初期計画、`pjBaseline1~` は変更履歴として運用ルールを定めるのがベストです。

—

3. 陥りやすい罠:エラーを制御せよ

VBAを組む際、初心者が必ず踏む地雷が「オブジェクトが空の場合」と「権限エラー」です。以下の例外処理を必ず組み込んでください。

Sub SafeBaselineSave()
On Error GoTo ErrorHandler

If ActiveProject.Tasks.Count = 0 Then
Err.Raise vbObjectError + 1, , “タスクが存在しません。”
End If

ActiveProject.SaveBaseline BaselineNumber:=pjBaseline0
Exit Sub

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

「なぜエラーハンドリングが必要か?」
Projectは、ファイルが読み取り専用だったり、タスクが空だったりすると容赦なくクラッシュします。`On Error GoTo` を使って、あなたのツールが「壊れない」ことを保証してください。これが堅牢な自動化への第一歩です。

—

4. プロの視点:次なるステップへ

このツールを完成させたら、次は以下の拡張に挑戦してみましょう。

1. 差分抽出: `Task.BaselineStart` と `Task.Start` を比較し、乖離が3日以上あるタスクだけを抽出して通知する。
2. 履歴ログのDB化: ログをExcelの特定シートに蓄積し、折れ線グラフで「計画遅延の推移」を可視化する。

ここまでできれば、あなたは単なる「マクロを書く人」ではなく、プロジェクトの可視化を操る「アーキテクト」です。

—

最後に:自動化は手段であり、目的ではない

VBAを学ぶ過程で一番大切なのは、「何のために自動化するのか」という問いです。ベースライン管理を自動化するのは、あなたが楽をするためではなく、チーム全体が「根拠ある計画」を共有するためです。

今回のコードは、その土台に過ぎません。まずは動かしてみてください。そこから見える景色が変わるはずです。もし分からないことがあれば、いつでもまた聞きに来てくださいね。

あなたの自動化ライフが、より豊かになることを応援しています!

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