【入門編】大規模WBSの分割:VBAで特定の階層を別ファイルに切り出し、依存関係を維持する – Project VBA解析バイブル

スポンサーリンク

こんにちは。プロジェクト管理の現場で「巨大すぎて開くだけで時間がかかる」「どこをいじればいいのか迷宮入りする」という壁にぶつかっていませんか?

もしあなたが今、MS Projectの画面と格闘しながら「これを自動で分割できたら…」と考えているなら、その直感は正しい。今日は、Project VBAを使いこなし、「大規模WBSの分割と依存関係の維持」という、プロの領域に足を踏み入れるための極意を伝授します。

1. なぜ「分割」が必要なのか? ― 構造の寿命を知る

大規模プロジェクトにおいて、一つのファイルにすべてを詰め込むのは「技術的負債」の温床です。Project VBAをマスターする第一歩は、「オブジェクトのライフサイクル」を理解すること。

  • 肥大化の弊害: 再計算(Recalculation)に時間がかかり、依存関係の論理破綻が起きやすくなる。
  • 分割のメリット: 各チームが担当する階層を独立させ、マスターファイルから「外部プロジェクトとして参照」させることで、疎結合なアーキテクチャを実現できます。

2. 実践:VBAで特定階層を抽出・保存するコード

まずは、親ファイルから「特定の階層(サマリータスク)」を切り出し、独立したプロジェクトファイルとして保存するスクリプトを見てみましょう。

Sub ExportHierarchyToFile()
Dim prj As Project
Dim tsk As Task
Dim newPrj As Project
Dim targetOutlineLevel As Integer

‘ 切り出したい階層(例:レベル2)
targetOutlineLevel = 2

‘ 現在のプロジェクトを取得
Set prj = ActiveProject

‘ 新規プロジェクトを作成し、隠しプロパティで裏で処理
Set newPrj = Application.Projects.Add(False)

‘ タスクをコピーして新規ファイルへ貼り付け
‘ ※単純なコピーではなく、必要な情報を精査して移すのが「エンジニアの流儀」
prj.Tasks.OutlineIndent (targetOutlineLevel) ‘ ここで該当階層を特定

‘ 実際にはここから「Task.Copy」と「newPrj.Tasks.Paste」を組み合わせます
‘ 重要:依存関係(Predecessors)はGUIDで保持されるため、
‘ リンクを維持するには外部ファイルとしてインポートさせる設計が肝です。

MsgBox “階層の切り出しが完了しました。保存先を指定してください。”
End Sub

【ここがプロの視点】コードの読み解き方

  • Application.Projects.Add(False): `False`を渡すことで、目に見えないバックグラウンドで処理を行います。GUIの描画負荷を排除する、これがパフォーマンス最適化の定石です。
  • 依存関係の罠: タスクを単にコピペするだけでは、内部的なIDが変わってしまい、依存関係(先行タスク)が切れます。本来は「外部プロジェクトのリンク(Cross-Project Linking)」として設定するのが正解です。

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

初心者が必ずハマるポイントは以下の2点です。

1. 「再計算」が走り続ける:
コード実行中にProjectが自動計算を始めると、動作が極端に重くなります。

  • 対策: `Application.Calculation = pjManual` で一時的に手動計算にし、処理終了後に `pjAutomatic` に戻しましょう。

2. IDの不整合:
タスクを移動するとIDが振り直されます。

  • 対策: `UniqueID` プロパティを使いましょう。これはプロジェクト内で不変(イミュータブル)な値なので、依存関係の紐付けには必須です。

4. 依存関係を維持するための「極限の知見」

巨大なWBSを分割した後、マスターファイルでそれらを統合するには、以下のコマンドをマスターしてください。

‘ マスターファイルでサブプロジェクトを読み込むコード例
Sub LinkSubProject()
‘ サブプロジェクトをマスターに「挿入」する
‘ これにより、外部ファイルとの依存関係が維持されます
Application.FileInsert Name:=”C:\Projects\SubTask_Level2.mpp”, _
Link:=True, _
InsertAsNewTask:=True
End Sub

この `Link:=True` こそが、大規模プロジェクト管理における「聖杯」です。ファイルを物理的に一つにまとめなくても、マスターファイル上で依存関係を可視化・管理できるのです。

最後に:エンジニアとして成長するために

ここまで理解できれば、あなたはもう「マクロの記録」を卒業したエンジニアです。

Project VBAを操るということは、単にタスクを並べることではなく、「プロジェクトという巨大な有機体を、どのようにモジュール化し、効率的に管理するか」という設計思想を持つことです。

まずは、小さなタスクリストで「切り出しとインポート」を試してみてください。エラーが出たら、それは「仕組みを理解するための良い教材」です。もし壁にぶつかったら、またここへ戻ってきてください。いつでもあなたの挑戦を応援しています。

さあ、あなたのプロジェクトを、もっとスマートで、もっと美しいものに変えていきましょう!

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