プロジェクトマネジメントの限界を超える:数千タスクを「フリーズさせずに」制御するVBAの極意
こんにちは。プロジェクトマネジメントの現場で、MS Projectの「計算エンジン」に泣かされた経験はありませんか?
「数千タスクのプロジェクトで制約条件を一つ変更しただけで、PCが固まって数分間動かない……」
それはあなたのPCのスペックが低いからではありません。MS Projectの計算エンジンが、タスク間の依存関係を網羅的に再計算しようとして「計算の爆発」を起こしているからです。
今日は、伝説的なアーキテクトが現場で使う「段階的適用(バッチ処理)」という秘伝のテクニックを伝授します。ここをマスターすれば、数千タスク規模のプロジェクトも、まるで魔法のようにスムーズに制御できるようになります。
—
1. なぜ、大規模プロジェクトはフリーズするのか?
MS Projectは、一つの変更を加えるたびに、ネットワーク図全体を走査してスケジュールを再計算します。これを「リアルタイム再計算」と呼びますが、数千タスクを超えると、この計算コストが指数関数的に増大します。
「制約条件(ASAPやALAPなど)を一度に適用しようとする」のが、フリーズの主原因です。
そこで、「タスクをグループ化し、分割して適用する」というアプローチをとります。
—
2. 実践:VBAによる「段階的制約条件適用」コード
まずは、特定のタスク範囲に対してASAP(できるだけ早く)を適用する基本コードを見ていきましょう。一気に更新するのではなく、ループの中で「少しずつ」命令を送るのがコツです。
Sub ApplyConstraintStepByStep()
‘ プロジェクトの再計算を一時停止して高速化(重要!)
Application.Calculation = pjManual
Dim tsk As Task
Dim count As Long
count = 0
‘ タスクを一つずつループ処理
For Each tsk In ActiveProject.Tasks
If Not tsk Is Nothing Then
‘ 特定の条件を満たすタスクのみ制約を変更
‘ ここでは「制約なし」のタスクをASAPに変更する例
If tsk.ConstraintType = pjConstraintNone Then
tsk.ConstraintType = pjConstraintASAP
‘ 100タスクごとに計算を反映(バッチ処理の肝)
count = count + 1
If count Mod 100 = 0 Then
Application.Calculate
DoEvents ‘ OSに制御を戻してフリーズを防ぐ
End If
End If
End If
Next tsk
‘ 最後に全体を再計算
Application.Calculation = pjAutomatic
Application.Calculate
MsgBox “制約条件の段階的適用が完了しました。”
End Sub
このコードの「極限の知見」ポイント
1. `Application.Calculation = pjManual`: これをやらずにVBAを回すのは、エンジンをかけっぱなしで車を修理するようなものです。まずは自動計算を止めましょう。
2. `DoEvents`: これが伝説のエンジニアの隠し味です。VBAが全力疾走している最中に、OSへ「UIの描画処理を挟んでいいよ」という隙間を作ります。これでフリーズによる「応答なし」を回避できます。
3. `count Mod 100`: 100タスクごとの小刻みな再計算。これにより、メモリ負荷を一定範囲に抑えつつ、順次変更を確定させていきます。
—
3. 初学者が陥りやすい「3つの罠」
VBAを書き始めると、必ず以下の壁にぶつかります。ここをクリアすれば、もう中級者の仲間入りです。
- 罠1:サマリータスクへの制約適用
- プロジェクト計画では、サマリータスク(親タスク)に制約条件をかけると、子タスクとの整合性が取れなくなり、計算がバグります。必ず `If Not tsk.Summary Then` で子タスクのみを対象にしてください。
- 罠2:オブジェクトの空判定
- MS Projectの `ActiveProject.Tasks` には、稀に削除されたタスクの残骸が含まれます。`If Not tsk Is Nothing Then` というガード節は、どんなにコードが短くても必ず記述する癖をつけてください。
- 罠3:再計算のタイミングを忘れる
- `Application.Calculate` を最後に実行するのを忘れると、画面上の表示とデータが乖離してしまいます。最後は必ず自動計算モードに戻し、明示的に再計算を走らせてください。
—
4. プロフェッショナルへの道
この「段階的適用」の手法は、制約条件だけでなく、「大規模な一括リソース割り当て」や「カスタムフィールドの計算」にも応用可能です。
重要なのは、「一度に全部やろうとしない」こと。
システムに負荷をかけないように配慮しながら、対話するように命令を出す。これこそが、大規模プロジェクトを掌握するアーキテクトの作法です。
ここをクリアできれば、あなたのプロジェクト管理は、ただの「記録」から、制御可能な「精密機械」へと進化します。
次は、どのタスクを自動化してみたいですか? 困ったときはいつでも聞いてください。あなたの進化を、この知見でサポートし続けます。
