【Project VBA極意】巨大なプロジェクトファイルが「開かない」を卒業する!計算モード制御による高速化の極み
こんにちは。プロジェクト管理の深淵、MS ProjectのVBAの世界へようこそ。
現場で数万行規模の巨大なプロジェクトファイルを扱っていると、必ずぶち当たる壁があります。そう、「ファイルを開くとき、PCがフリーズしたように重くなる問題」です。
これはProjectがファイルを開く際、裏で律儀にすべてのタスクの依存関係や工数を再計算しているために起こる現象です。今日は、この「余計なおせっかい」をVBAで制御し、爆速で起動させるための「計算モード管理術」を伝授します。
—
なぜ「計算モード」を操作する必要があるのか?
MS Projectは、ファイルを開く際に「すべてのタスクを再計算する」というデフォルト設定を持っています。タスクが100個なら一瞬ですが、1万個を超えるとどうでしょう? 依存関係が複雑なほど、Projectは膨大な計算リソースを消費します。
これを回避する唯一の解が、「計算を一時停止(手動設定)にして開き、読み込み完了後に計算させる」という手順です。
処理の全体図(フロー)
1. 計算モードの保存: 現在のモードを記録。
2. 手動モードへの切替: 計算を止めて負荷を最小化。
3. ファイルオープン: データのみをメモリに展開。
4. 計算モードの復旧: 最後に一括計算を実行。
—
実践!高速起動のためのVBAコード
以下のコードは、標準モジュールに貼り付けて使用してください。プロジェクトの現場でそのまま使えるよう、堅牢な構成にしています。
Sub OpenLargeProjectFast()
Dim filePath As String
Dim originalCalculationMode As PjCalculation
‘ 開きたいファイルのパスを指定
filePath = “C:\Projects\MegaProject.mpp”
‘ 1. 現在の計算モードを退避(後で戻すため)
originalCalculationMode = Application.Calculation
‘ 2. 計算モードを「手動」に設定して負荷をカット
Application.Calculation = pjManual
‘ 3. ファイルを開く
‘ 読み込み中は計算が走らないため、劇的に速くなる
On Error Resume Next ‘ 万が一のエラー対策
FileOpenEx Name:=filePath
If Err.Number <> 0 Then
MsgBox “ファイルの読み込みに失敗しました。”
Application.Calculation = originalCalculationMode
Exit Sub
End If
On Error GoTo 0
‘ 4. 読み込み完了後、計算モードを元に戻し、一括計算させる
Application.Calculation = originalCalculationMode
‘ 5. 必要に応じて再計算を実行
Application.CalculateAll
MsgBox “起動完了!計算も正常に終了しました。”
End Sub
—
初学者が陥りやすい「罠」と解決策
コードを書くとき、以下のポイントを意識するだけで、あなたのVBAエンジニアとしてのレベルは一段階上がります。
1. `Application.Calculation` を戻し忘れるな
計算モードを「手動」に変えたままにしておくと、ユーザーは次に自分でタスクを追加したときに「なぜか工数が更新されない!」とパニックになります。必ず最後に元のモードに戻す(あるいは明示的に `pjAutomatic` に戻す)のがプロの作法です。
2. `FileOpenEx` を活用せよ
単なる `FileOpen` ではなく、`FileOpenEx` を使うことで、読み込み時の読み取り専用オプションや、エンコーディングなどの細かい制御が可能になります。現場の運用に合わせて拡張しやすいメソッドです。
3. エラーハンドリングは必須
巨大なファイルはネットワークドライブ上にあったり、他人が編集中だったりすることがあります。`On Error` を適切に使い、ファイルを開けなかった場合に計算モードだけが「手動」で放置される事態を避けましょう。
—
さらに極めるための「アーキテクトの視点」
今回紹介した手法は、いわば「外科手術」のようなものです。もっと根本的に解決したい場合は、以下のことも検討してみてください。
- 不要なリソースの削除: 使っていないカスタムフィールドや、複雑すぎる数式がないか見直す。
- ファイル分割: WBSの階層が深すぎる場合、サブプロジェクトとして分割運用する。
VBAは、単に「楽をするための道具」ではなく、「Projectという巨大なシステムの挙動を制御するための司令塔」です。この計算モードの制御をマスターしたあなたなら、どんなに巨大なプロジェクトファイルも自在に操ることができるはずです。
「ここをクリアすれば、Project VBAの基本はバッチリ」です。ぜひ、明日の業務で試してみてください。何か不明点があれば、いつでも聞きに来てくださいね。応援しています!
