ようこそ、プロジェクトマネジメントの深淵へ。
「マクロの記録」ボタンを押すだけの日常から卒業し、プロジェクトの「意思」をコードで操るエンジニアの世界へ足を踏み入れた皆さん、素晴らしい決断です。
今日は、Project VBAの真髄である「スケジュール計算エンジンの制約条件を可視化する」という、実務で最も重宝されるテクニックを伝授します。ガントチャート上のバーがただの「棒」ではなく、その背後にある「納期」や「意図」を語り出す。そんな管理システムを一緒に構築しましょう。
—
なぜ「制約条件」の可視化が必要なのか
Projectにおいて、タスクは生き物です。`ASAP`(できるだけ早く)なのか、`ALAP`(できるだけ遅く)なのか、あるいは固定の日付が設定されているのか。これらはスケジュールエンジン(自動計算機能)の挙動を左右する「心臓部」です。
しかし、標準のガントチャートだけでは、どれが「動かしていいタスク」で、どれが「動かしてはいけないタスク」なのか、パッと見て判断できません。これをVBAで解決します。
—
Step 1: プロジェクトの心臓部に触れる(オブジェクトモデル)
VBAでProjectを制御する際、最も重要なのは `ActiveProject.Tasks` コレクションです。
制約条件は、各タスクの `ConstraintType` プロパティに格納されています。
- 定数の一部:
- `pjConstraintASAP`: 0(基本)
- `pjConstraintALAP`: 1
- `pjConstraintStartNoEarlierThan`: 4(固定納期や開始制限)
まずは、タスクを巡回し、制約条件に応じて「ガントバーの色」を変えるロジックを書きましょう。
—
Step 2: 制約条件を可視化する魔法のコード
以下のコードは、タスクの制約条件を読み取り、特定の条件(例:ASAP以外)であればバーの色を赤くし、インジケーターとしてマークを付ける実用的なスクリプトです。
Sub VisualizeConstraints()
Dim tsk As Task
‘ プロジェクト内の全タスクを巡回
For Each tsk In ActiveProject.Tasks
‘ タスクがサマリータスク(親)でないか確認
If Not tsk Is Nothing Then
If Not tsk.Summary Then
‘ 制約条件の種類で分岐
Select Case tsk.ConstraintType
Case pjConstraintASAP
‘ ASAPなら標準(青系など)
tsk.BarColor = pjBlue
Case Else
‘ それ以外(固定日付やALAP等)は「赤」で警告
tsk.BarColor = pjRed
‘ ユーザーへのメモとして「制約あり」と付記
tsk.Notes = “【重要】このタスクには制約条件が設定されています。”
End Select
End If
End If
Next tsk
MsgBox “可視化が完了しました。リスクのあるタスクが赤くなっています。”, vbInformation
End Sub
—
Step 3: 初学者が陥りやすい「3つの罠」
コードを書いていると、必ずと言っていいほど躓くポイントがあります。ここさえ押さえれば、あなたはもう中級者です。
1. Nothingオブジェクトの罠:
Projectのタスクリストには、削除された行や空行が `Nothing` として紛れ込むことがあります。`If Not tsk Is Nothing Then` のチェックを忘れると、実行時エラー13(型不一致)で即死します。
2. サマリータスクの制御:
サマリー(親タスク)の色を直接変更しようとすると、計算エンジンと競合したり、階層構造の見た目が崩れたりします。`If Not tsk.Summary` で、「末端のタスクのみ」を制御対象にするのが定石です。
3. 計算の再実行(再描画):
VBAでプロパティを変更しても、画面に反映されない場合があります。必要に応じて `Application.CalculateAll` を呼び出し、エンジンを強制的に再計算させるのが「プロの作法」です。
—
さらに高みを目指すあなたへ
今回紹介したのは「色を変える」という初歩ですが、これができるようになれば、次は「制約違反(遅延)が発生した際に、Outlook経由で担当者に自動メールを送る」といった、より高度な自動化へステップアップできます。
Project VBAは、単なる事務作業の効率化ツールではありません。プロジェクトの「健康状態」を監視し、危機を未然に防ぐための「コントロールセンター」そのものです。
「ここをクリアすれば、Project VBAの基本はバッチリですよ」。
まずはこのコードをコピーし、お手元のプロジェクトで実行してみてください。ガントチャートが赤く染まったとき、あなたはプロジェクトの本当の支配者になったことに気づくはずです。
質問があればいつでもどうぞ。あなたのエンジニアリングライフを全力で応援しています。
