【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を学ぶ過程で一番大切なのは、「何のために自動化するのか」という問いです。ベースライン管理を自動化するのは、あなたが楽をするためではなく、チーム全体が「根拠ある計画」を共有するためです。
今回のコードは、その土台に過ぎません。まずは動かしてみてください。そこから見える景色が変わるはずです。もし分からないことがあれば、いつでもまた聞きに来てくださいね。
あなたの自動化ライフが、より豊かになることを応援しています!
