Project VBAの「重さ」を解き放て:ScreenUpdatingとCalculationで爆速化を実現する
こんにちは。現場で泥臭く、かつスマートに自動化を追求しているエンジニアです。
皆さんが書いたProject VBAのコード、実行すると画面がパタパタと小刻みに震え、処理が終わるまでコーヒーを淹れて戻ってきてもまだ動いている……なんてことはありませんか?
ProjectはExcelと異なり、タスクやリソースの依存関係を常に計算し直すという「重厚なエンジン」を積んでいます。「1行更新するたびに画面を描画し、依存関係を再計算する」というデフォルトの挙動は、数千件のタスクを扱う現場では致命的なボトルネックになります。
今日は、その「ブレーキ」を意図的に外すことで、処理速度を劇的に向上させる極意を伝授します。
—
なぜマクロは「遅い」のか?
Projectの裏側では、常に以下のコストが発生しています。
1. GUI更新(ScreenUpdating): 画面上でタスクのバーが動くたびに、OSが描画処理を走らせる。
2. 再計算(Calculation): 1つのタスクの日付が変わると、リンクされた後続タスク全てのスケジュールを再計算する。
この2つを「手動」に切り替えるだけで、処理速度は体感で数倍から数十倍に跳ね上がります。
—
爆速化の鉄板パターン:コードの書き方
まずは、この「おまじない」を覚えてください。マクロの冒頭と終了時に必ず配置する定型句です。
Sub OptimizedTaskUpdate()
‘ — 1. 処理開始:負荷の大きい設定をオフにする —
‘ 画面描画を停止
Application.ScreenUpdating = False
‘ 自動再計算を一時停止(手動モードへ)
Application.Calculation = pjManual
On Error GoTo ErrorHandler ‘ エラー発生時に設定を戻すための保険
‘ — ここに本番の処理を記述 —
Dim t As Task
For Each t In ActiveProject.Tasks
If Not t Is Nothing Then
t.Text1 = “Updated” ‘ 大量更新のシミュレーション
End If
Next t
‘ — 2. 処理終了:設定を元に戻す —
Application.ScreenUpdating = True
Application.Calculation = pjAutomatic
MsgBox “処理が完了しました。”
Exit Sub
ErrorHandler:
‘ 万が一エラーが起きても設定を戻さないとProjectが操作不能になるため必須
Application.ScreenUpdating = True
Application.Calculation = pjAutomatic
MsgBox “エラーが発生しました: ” & Err.Description
End Sub
このコードの「魂」:エラーハンドリングの重要性
初学者が最も陥りやすい罠が、「途中でエラーが起きた際に、設定を戻し忘れること」です。これをやると、Projectの画面が一切更新されなくなり、再起動するまで「死んだ状態」になります。
必ず `On Error GoTo` を使い、どんな状況でも設定をクリーンアップするようにしてください。これができるだけで、周りからの信頼度が格段に上がります。
—
陥りやすい「罠」と解決策
罠1:Calculationの罠
ExcelのVBAと異なり、Projectの `Calculation` プロパティは非常に強力です。これを `pjManual` にすると、リンク関係が一時的に無視されます。
もし、処理の途中で「タスクの日付を計算した結果を使いたい」というロジックがある場合は、 `Application.CalculateAll` を明示的に呼び出す必要があります。
罠2:Taskオブジェクトの走査
`For Each t In ActiveProject.Tasks` は便利ですが、大規模なプロジェクトでは非常に時間がかかります。もし特定の条件だけで良いのであれば、`Filter` を適用してから回すなど、「対象を絞り込んでからループする」のがプロの流儀です。
—
まとめ:ここをクリアすれば「脱・初心者」
今回学んだテクニックは以下の3点です。
- ScreenUpdating = False: 画面の描き込みを止め、メモリへの書き込みに専念させる。
- Calculation = pjManual: 複雑な依存関係の再計算をラスト1回に集約する。
- エラーハンドリングの徹底: 処理失敗時にプロジェクトの状態を放置しない。
これらを意識するだけで、あなたの書くマクロは「ただ動くコード」から「現場を救うエンジニアの道具」へと進化します。
Project VBAは、その巨大なデータ構造ゆえに繊細な扱いが求められます。しかし、今回のような基礎的な「ブレーキの制御」をマスターすれば、もう怖いものはありません。ぜひ次のプロジェクトで試してみてください。
あなたの開発現場が、より軽快で快適なものになることを願っています。応援していますよ!
