Project VBAを掌握せよ:マイルストーンの「死」を未然に防ぐ、依存関係自動監視ダッシュボードの構築法
こんにちは。現場で泥臭く、かつエレガントにプロジェクトを回し続けてきた皆さんの「頼れる先輩」です。
Project VBAの世界へようこそ。マクロの記録ボタンを押して満足していた時期はもう終わりです。今日は、プロジェクト管理の要である「マイルストーン」を死守するための、本格的な自動追跡ダッシュボードの作り方を伝授します。
「なぜタスクが遅れているのか?」「どのタスクがマイルストーンにトドメを刺そうとしているのか?」――これを一瞬で可視化するのがプロの仕事です。
—
1. Project VBAの「心臓部」を知る
Project VBAで最も重要なのは、「オブジェクト階層」の理解です。
Projectのデータは、以下のようなピラミッド構造になっています。
- Application(Project本体)
- ActiveProject(現在開いているファイル)
- Tasks(すべてのタスクの集まり)
- Task(個々のタスク)
この構造を理解せず、いきなりコードを書くのは地図を持たずに山に入るようなもの。まずは「Taskオブジェクト」をどう操作するか、そこから始めましょう。
—
2. 実践:マイルストーン監視エンジンの設計
今回の目標は、「指定したマイルストーンに対し、依存関係にある先行タスク(Predecessors)が遅延している場合にアラートを出す」というロジックです。
以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。
Sub MonitorMilestoneDependencies()
Dim tsk As Task
Dim pred As Task
Dim milestone As Task
Dim proj As Project
Set proj = ActiveProject
‘ 監視したいマイルストーンのID(例:ID 10)
Set milestone = proj.Tasks(10)
Debug.Print “— マイルストーン監視開始: ” & milestone.Name & ” —”
‘ マイルストーンに直接依存しているタスクを走査
For Each pred In milestone.PredecessorTasks
‘ 終了予定日を過ぎているのに完了していないタスクを検知
If pred.Finish < Date And pred.PercentComplete < 100 Then
' 即座にイミディエイトウィンドウに警告を出す(ここをメール送信等に拡張可能)
Debug.Print "警告: タスク '" & pred.Name & "' が遅延中!マイルストーンへの影響大。"
' セルを赤く染めるなどのUIアクション(重要:VBAは視覚的フィードバックが命)
pred.Text1 = "遅延警告"
pred.TaskColor = pjRed
End If
Next pred
End Sub
このコードの「本質」
- `PredecessorTasks` プロパティ: これこそがProject VBAの真骨頂。依存関係をわざわざ複雑な計算式で追う必要はありません。APIが提供するこのコレクションを使うだけで、先行タスクの網羅的な取得が可能です。
- `PercentComplete` と `Finish`: この2つを比較するだけで、プロジェクトの「健康状態」が判定できます。
—
3. 陥りやすい「3つの罠」
初心者が必ずと言っていいほどハマるポイントがあります。ここを回避できるだけで、あなたは中級者の入り口に立っています。
1. 「マイルストーン」かどうかの判定を忘れる
- すべてのタスクがマイルストーンとは限りません。`If tsk.Milestone = True Then` という分岐を必ず入れましょう。そうしないと、重要ではないタスクまで監視してノイズだらけになります。
2. 依存関係が「階層構造」になっているケース
- 今回のコードは「直接の先行タスク」しか見ません。もし孫タスクの遅延まで追いたい場合は、再帰関数(Recursive Function)が必要になります。まずはここをマスターしてから挑戦してください。
3. 計算モードの壁
- Projectには「自動計算」機能があります。大量のタスクをループ処理する際は、`Application.Calculation = pjManual` に一時的に設定し、処理後に `pjAutomatic` に戻すとパフォーマンスが劇的に向上します。
—
4. 次のステップ:君がエンジニアとして進化するために
今回のコードは、いわば「初めの一歩」です。ここから先は、以下の機能を実装して自分専用の武器に仕上げてください。
- 自動通知機能: `Outlook.Application` をVBAから呼び出し、遅延検知時に担当者へ自動メールを送る。
- ダッシュボード化: 特定のビュー(Report)をVBAで制御し、遅延タスクだけを抽出した「アラートレポート」を自動生成する。
—
先輩からのメッセージ
コードを書くことは、プロジェクトの「混沌」に「秩序」を与える行為です。
VBAは古い言語と言われることもありますが、プロジェクトの現場でこれほど強力な「自動化の武器」は他にありません。
まずはこのコードを動かしてみてください。エラーが出たら、それは「君が成長するための信号」です。Project VBAの深淵を覗き込み、プロジェクトを支配する側に回りましょう。
また次の講義でお会いしましょう。質問があればいつでもどうぞ。君の健闘を祈っています。
