【入門編】「制約なし」タスクの自動ASAP化:レガシープロジェクトのデータクレンジング手法 – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理の「曖昧さ」を排除せよ:VBAで制約なしタスクをASAP化する現場の知見

プロジェクトマネジメントの世界へようこそ。私はこれまで数多の巨大プロジェクトのデータ構造を見てきましたが、現場で最も「計算エンジンを狂わせる癌」となるのが、「制約条件が設定されていないタスク」の存在です。

Projectの計算エンジンは、制約がないタスクを見つけると「今はどこに配置すればいいんだ?」と迷走し、結果としてスケジュール予測がガタガタになります。今回は、VBAを使ってこの「無秩序な状態」を「ASAP(可能な限り早く)」という強力な規律で整える、実務直結の手法を伝授します。

—

1. なぜ「制約なし」が危険なのか

Projectにおいて、制約条件を設定しないとタスクはデフォルトで「ASAP(できるだけ早く)」として振る舞うように見えます。しかし、データインポートや過去のレガシーな工程表では、この値が「Null」や「未定義」のまま残り、エンジンの挙動を不安定にさせることがあります。

「明示的にASAPを指定すること」。これこそが、計算エンジンに「君のやるべきことは、先行タスクが終わり次第、即座に着手することだ」と明確な意志を伝える唯一の道なのです。

—

2. VBAで一括制御するための基本構造

Project VBAにおいて、タスクの制約条件を司るのは `ConstraintType` プロパティです。これを `pjConstASAP` という定数に書き換える作業を行います。

実践コード:制約なしタスクのASAP強制適用

このコードは、現在アクティブなプロジェクト内の全タスクを走査し、制約が設定されていないものだけをASAPへ強制変換します。

Sub ForceApplyASAP()
Dim tsk As Task
Dim count As Long

‘ プロジェクト内の全タスクをループ
For Each tsk In ActiveProject.Tasks
‘ tskが空(削除済み)でないことを確認
If Not tsk Is Nothing Then
‘ 制約条件が「制約なし(pjConstNone)」であるかチェック
If tsk.ConstraintType = pjConstNone Then

‘ 強制的にASAPへ変更
tsk.ConstraintType = pjConstASAP

‘ 変更したタスクをカウント
count = count + 1
End If
End If
Next tsk

MsgBox count & ” 件のタスクにASAP制約を適用しました。”, vbInformation, “完了”
End Sub

—

3. コードの読み解き:ここを押さえれば怖くない

このコードの中で、特に重要なポイントを3つだけ解説します。

1. `ActiveProject.Tasks`:
現在開いているプロジェクトの全タスクにアクセスする玄関口です。`For Each` を使うことで、タスクのIDが連番でなくても漏れなくスキャンできます。
2. `tsk Is Nothing` のチェック:
VBAの罠です。途中で削除されたタスク行は「空のオブジェクト」としてメモリ上に残ることがあります。これを無視してプロパティを叩くと、容赦なくエラーで落ちます。このガードは必須です。
3. `pjConstASAP`:
Projectが用意している組み込み定数です。数値で「0」や「1」と書くより、このように名前で書くことで、コードの可読性と保守性が劇的に向上します。

—

4. 陥りやすいエラーと回避策

Q. 「実行時エラー:読み取り専用です」と言われる

A. プロジェクトが保護されているか、実作業中に計算エンジンがロックしている可能性があります。
大量のタスクを更新する場合、`Application.Calculation = pjManual` を冒頭に記述し、計算エンジンを一時的に停止させることで、処理速度が数倍向上し、ロックエラーも防げます。

Q. 全員ASAPにして本当に大丈夫?

A. はい、基本はそこからです。
プロジェクトの管理手法によっては「日付固定(Start No Earlier Thanなど)」が必要なタスクもあるでしょう。その場合は、コード内の条件式を `If tsk.ConstraintType = pjConstNone Then` だけでなく、特定条件下(例:マイルストーンではない、等)で除外するロジックを加えることで、より高度な制御が可能になります。

—

最後に:エンジニアとしてのステップアップ

今回紹介したコードは、言わば「プロジェクトの健康診断」です。
データクレンジングを自動化することで、あなたは「なぜスケジュールが動かないのか?」という非生産的な調査から解放され、本来注力すべき「プロジェクトの戦略立案」に時間を割くことができます。

このコードを叩き台にして、ぜひあなたのプロジェクトに合わせてカスタマイズしてみてください。ここをクリアすれば、あなたはもうマクロの記録に頼る初心者ではありません。次は `Task.Duration` や `Task.Predecessors` を操作して、スケジュールの自動生成に挑戦してみましょう。

応援しています。VBAでの自動化は、あなたのキャリアを劇的に変える武器になりますよ!

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