【入門編】【中級者向け】プロジェクト開始日の変更に伴う全タスクの「開始日固定」制約の自動解除と再配置 – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「硬直」を解き放て:Project VBAで実現する制約解除の極意

こんにちは。現場で泥臭く、しかし誰よりもスマートに自動化を追求しているエンジニアです。

Project VBAを触り始めると、誰もが一度は直面する「壁」があります。それが「開始日をずらしたいのに、ガチガチに固まって動かないタスクたち」です。

プロジェクトの開始日が1週間後ろ倒しになった。それだけで、手動設定された制約(Constraint)が災いし、計画全体がパズルのように崩れていく……。そんなストレスを、今日はコードの力で「一瞬」で解決しましょう。

—

なぜ「制約」がプロジェクトを殺すのか?

Projectのタスクには、`ConstraintType`というプロパティがあります。これが「開始日固定(Must Start On)」などになっていると、Projectのエンジンは「どんなに先行タスクが遅れても、このタスクはここから動かさない」と判断します。

これが積み重なると、プロジェクトは柔軟性を失い、修正不可能な「硬直状態」に陥る。中級者へのステップアップとは、「この制約をどう動的に制御するか」を理解することに他なりません。

—

極限の自動化:制約解除と再配置のロジック

今回紹介するのは、プロジェクト全体の全タスクの制約を「できるだけ早く(As Soon As Possible)」に戻し、プロジェクト開始日に合わせて再計算させるための強力なスクリプトです。

現場でそのまま使えるVBAコード

Sub ResetAllConstraintsToASAP()
‘ プロジェクトの全タスクを走査し、手動制約を解除する
Dim tsk As Task
Dim proj As Project
Set proj = ActiveProject

‘ 警告を抑制して処理速度を上げるのがプロの作法
Application.ScreenUpdating = False

On Error Resume Next ‘ 万が一の予期せぬエラーで止まらないように

For Each tsk In proj.Tasks
‘ 既に空行(サマリータスク等)を除外するチェック
If Not tsk Is Nothing Then
‘ 制約を「できるだけ早く (pjASAP)」にリセット
‘ これにより、依存関係に基づいた自動計算が復活する
tsk.ConstraintType = pjASAP

‘ 必要であれば、特定の開始日もクリアする
‘ tsk.ConstraintDate = “NA”
End If
Next tsk

‘ 最後にプロジェクト全体を再計算して整合性を取る
CalculateProject

Application.ScreenUpdating = True
MsgBox “全タスクの制約解除が完了しました。計画がしなやかに再構築されます。”, vbInformation
End Sub

—

このコードの「魂」を解説する

1. `pjASAP` の持つ意味

制約を`pjASAP`に設定するということは、Projectに対して「先行タスクが終われば、すぐに開始してくれ」と指示することです。これがProject本来の自動スケジューリング機能(クリティカルパス法)を最大限に活かす状態です。

2. `Application.ScreenUpdating = False` の重要性

これがないと、タスクが更新されるたびに画面が再描画されます。数千行のタスクがある場合、これだけで処理時間が数十倍変わります。「無駄な描画はエンジニアの敵」と覚えておいてください。

3. `On Error Resume Next` の使いどころ

本来は乱用厳禁ですが、一括処理においては「特定の壊れたタスクで処理を止めない」ための防波堤として機能します。ただし、商用ツールを作る際は、しっかりエラーハンドリングを記述するのがプロの矜持です。

—

よくあるエラーと陥りやすい罠

  • 「サマリータスクを触ってしまう」

サマリータスクに無理やり制約をかけると、サブタスクの計算が狂います。基本は「個別のタスク(Work Task)」を対象にループを回すように意識してください。

  • 「計算が追いつかない」

プロジェクトが非常に巨大な場合、`CalculateProject`を呼ぶタイミングを制御する必要があります。基本は最後の一回だけ呼ぶのが定石です。

—

次のステージへ:ここをクリアすれば「君はもう中級者だ」

このスクリプトをマスターした皆さんに、次に目指してほしいのは「依存関係(Links)の可視化」です。制約を解除した後に、どのタスクがボトルネックになっているかを抽出する……そんなツールを自作できれば、あなたはチームで替えの効かない「業務自動化の魔術師」になれるはずです。

Project VBAは、単なるマクロではありません。「プロジェクトという名の複雑な生き物を、意のままに操るための魔法」です。

まずはこのコードをコピーして、実験環境のプロジェクトで試してみてください。計画がパタパタと連鎖的に動く快感を味わったとき、あなたはまた一つ、エンジニアとして高みへ登っているはずです。

また何か壁にぶつかったら、いつでもここへ戻ってきてくださいね。応援しています。

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