【入門編】マイルストーンタスクに対する「終了日固定」制約のVBA自動付与ツール – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵へ:マイルストーンを「鉄壁」にする終了日固定の極意

こんにちは。現場で泥臭い自動化を積み重ね、いつしかProjectの内部エンジンの挙動を掌握するに至った、あなたの開発サポーターです。

「マクロの記録」から一歩踏み出し、Projectの計算エンジン(スケジューリング・エンジン)と対話しようとするあなたを歓迎します。Project VBAは単なる自動化ツールではありません。「計画という名の生き物」を操る魔法の杖です。

今日は、多くのエンジニアが躓く「スケジュールが勝手に動いてしまう」という悩みを解消する、マイルストーンの「終了日固定(Must Finish On)」を自動付与するツールについて、その本質を解説します。

—

1. なぜ「終了日固定」が必要なのか?

Projectの標準エンジンは、非常に優秀です。しかし、時に「余計なお世話」をしてくれます。特にマイルストーン(期間0日のタスク)に対して、先行タスクの影響を受けて日付を勝手にスライドさせてしまうことがあります。

進捗管理において、「ここは絶対に動かしてはいけない」という基準点(デッドラインや納品日)がある場合、私たちはエンジンに対して「このタスクはここから一歩も動かすな」という制約(Constraint)を強制的に刻み込む必要があります。

—

2. 現場で使える「終了日固定」自動付与スクリプト

以下のコードは、選択したマイルストーンに対して、現在の終了日を「終了日固定(Must Finish On)」として固定するものです。

Sub ForceLockMilestone()
‘ Projectオブジェクトの定義
Dim tsk As Task

‘ 現在選択しているタスクを対象にする(現場の基本)
For Each tsk In ActiveSelection.Tasks
‘ 1. マイルストーンかどうかを確認(Duration = 0)
If tsk.Duration = 0 Then

‘ 2. 制約条件を「終了日固定(Must Finish On)」に変更
‘ pjConstraintMustFinishOn は定数。数値だと 4 です。
tsk.ConstraintType = pjConstraintMustFinishOn

‘ 3. 現在の終了日を制約日として再設定
‘ プロパティの更新は計算エンジンを走らせるトリガーになります
tsk.ConstraintDate = tsk.Finish

Debug.Print “タスク「” & tsk.Name & “」を固定しました。”
Else
Debug.Print “タスク「” & tsk.Name & “」はマイルストーンではないためスキップします。”
End If
Next tsk

MsgBox “選択したマイルストーンを固定しました!”, vbInformation
End Sub

コードのここがポイント!

  • ActiveSelection.Tasks: 全タスクをループさせるのではなく、ユーザーが「これだ!」と選んだものだけを対象にします。これは誤操作を防ぐための、熟練エンジニアの流儀です。
  • pjConstraintMustFinishOn: これがProject VBAの「制約コード」です。これを指定することで、エンジンは「外部要因に左右されず、この日付を死守せよ」と解釈します。

—

3. 初学者が陥りやすい「3つの罠」

このコードを動かす際、以下の点に注意してください。これが理解できれば、あなたはもう初心者ではありません。

① 計算エンジンの再計算待ち

VBAを実行した直後、画面上の日付が更新されるまでコンマ数秒のラグがある場合があります。大規模なプロジェクトでは、`Application.CalculateAll` を明示的に呼び出すことで、強制的にエンジンを同期させることが重要です。

② すでに制約がある場合

もしタスクに別の制約(開始日固定など)がすでにかかっている場合、`ConstraintType`を変更するだけで上書きされますが、整合性が取れなくなることがあります。実行前に「本当にこれでいいか?」を確認するダイアログを挟むのが、プロの設計です。

③ 「マイルストーン」の定義を疑う

`Duration = 0` だけで判断していますが、現場によっては「期間が短いがマイルストーンとして扱いたいタスク」があるかもしれません。その場合は、`Flag1` などのユーザー定義フィールドを使って判断させるのが、より堅牢な設計への道です。

—

4. 次のステップへ

マクロの記録から脱却したあなたは、今、Projectというエンジンの「制御権」を手に入れました。

今回紹介した「制約条件の操作」を皮切りに、次は「特定条件のタスクを一括で色分けする」や「進捗率が一定以下のタスクを自動で抽出してレポート化する」といった領域に踏み込んでみてください。

Project VBAを使いこなすコツは、「Projectが裏側でどうやって計算しているか」を想像することです。

何か不明な点や、さらに高度な制御(例えば、依存関係を維持したまま制約を移動させるロジックなど)に興味があれば、いつでも聞いてください。あなたの自動化の旅を、全力でサポートします。

ここをクリアしたあなたは、もうProject VBAの入り口を完全に突破しました。自信を持って、次のコードを書き始めてください!

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