【実務・中級編】【上級者向け】プロジェクトのテンプレート(.mpt)を動的に差し替えて新規作成する運用自動化 – Project VBA解析バイブル

スポンサーリンク

プロジェクトの胎動を自動化せよ:Project VBAによる「動的テンプレート・ファクトリ」の極致

Microsoft Project(以下MS Project)を単なる「ガントチャート作成ツール」として使っているうちは、まだ初心者だ。真のアーキテクトは、MS Projectを「実行可能なデータの構造体」として捉える。

特に、数千ものタスク、独自のカスタムフィールド、複雑なカレンダー設定、そして厳密なベースライン管理が求められるエンタープライズ環境において、手動で「ファイル > 新規作成 > テンプレートを選択」などという作業を繰り返すのは、ミスの温床であり、エンジニアリングへの冒涜と言える。

今回は、プロジェクトの性質(IT開発、設備投資、保守運用など)に応じて、最適な`.mpt`(テンプレートファイル)を動的に選択・適用し、即座に運用可能な状態でデプロイする「動的テンプレート・ファクトリパターン」の設計思想と実装を伝授する。

1. なぜ「手動」や「単純コピー」ではいけないのか

多くの現場では、既存の`.mpp`ファイルをコピーして使い回すという悪習が蔓延している。しかし、この手法には以下の致命的な欠陥がある。

1. 負の遺産の継承: 前プロジェクトの進捗データ、ステータス日付、実績コストがゴミとして残り、レポートを汚染する。
2. Global.mptの汚染: 不適切なカスタムフィールドやビューが共通設定(Global.mpt)を書き換え、環境全体を不安定にする。
3. ベースラインの不整合: コピー元のベースラインが残っていると、新プロジェクトの「計画 vs 実績」の乖離が正しく計測できない。

解決策は、純粋な`.mpt`(テンプレート)から、プログラムによって「制御されたインスタンス」を生成することだ。

2. 動的ファクトリパターンの設計アーキテクチャ

我々が構築すべきは、プロジェクトの種別を引数に取り、適切なテンプレートをロードして初期化する抽象化レイヤーだ。

設計のポイント

  • 疎結合: テンプレートのパスやプロジェクト属性は定数や外部DB(または設定ファイル)で管理する。
  • ライフサイクル管理: プロジェクト作成、プロパティ設定、ベースライン設定、保存までを一気通貫で制御する。
  • 堅牢なエラー処理: MS ProjectはUI操作を伴うため、ダイアログ表示によるマクロ停止を徹底的に排除する。

3. プロダクション・コード:ProjectFactoryモジュール

以下のコードは、単なるサンプルではない。実務での再利用性を極限まで高めた、プロフェッショナル仕様のファクトリロジックである。

Option Explicit

‘ プロジェクト種別の定義(拡張性を考慮)
Public Enum ProjectType
PT_IT_Development = 1
PT_Infrastructure = 2
PT_Maintenance = 3
End Enum

”’

”’ プロジェクト生成の司令塔(ファクトリメソッド)
”’

Public Sub CreateNewProjectInstance(ByVal pType As ProjectType, ByVal projectName As String)
Dim templatePath As String
Dim appProject As MSProject.Application

Set appProject = MSProject.Application

‘ 1. プロジェクト種別に応じたテンプレートパスの解決
templatePath = GetTemplatePath(pType)

If templatePath = “” Then
Err.Raise vbObjectError + 513, “ProjectFactory”, “指定された種別のテンプレートが存在しません。”
End If

‘ 2. MS Projectの挙動制御(描画停止とアラート抑制)
On Error GoTo CleanUp
appProject.ScreenUpdating = False
appProject.DisplayAlerts = False

‘ 3. テンプレートを基に新規プロジェクトを作成
‘ FileNewのTemplate引数を使用することで、Global.mptとの競合を最小限に抑える
appProject.FileNew Template:=templatePath

‘ 4. インスタンスの初期化設定
With appProject.ActiveProject
.Title = projectName
.Subject = “Generated by Automation Factory”

‘ カレンダー設定の強制適用(必要に応じて)
‘ .Calendar = “標準作業時間”

‘ 5. ベースライン0(初期計画)の設定
‘ テンプレート展開直後の状態を「計画」として刻印する
BaselineSave All:=True, Copy:=pjCopy0, Into:=pjInto0

‘ 6. ファイルの保存(パスは運用環境に合わせて調整)
Dim savePath As String
savePath = ThisWorkbook.Path & “\” & projectName & “_” & Format(Now, “yyyymmdd”) & “.mpp”

appProject.FileSaveAs Name:=savePath
End With

MsgBox “プロジェクト ‘” & projectName & “‘ を正常に生成しました。”, vbInformation

CleanUp:
appProject.DisplayAlerts = True
appProject.ScreenUpdating = True

If Err.Number <> 0 Then
MsgBox “致命的エラー: ” & Err.Description, vbCritical, “ProjectFactory Error”
End If
End Sub

”’

”’ テンプレート管理ロジック(外部DBや設定シートへの切り出しを推奨)
”’

Private Function GetTemplatePath(ByVal pType As ProjectType) As String
Dim baseDir As String
baseDir = “C:\Corp\Templates\” ‘ 実際には共有サーバのパスなどを指定

Select Case pType
Case PT_IT_Development: GetTemplatePath = baseDir & “Standard_IT_v2.mpt”
Case PT_Infrastructure: GetTemplatePath = baseDir & “Infra_Construction_v1.mpt”
Case PT_Maintenance: GetTemplatePath = baseDir & “Ops_Maintenance_v1.mpt”
Case Else: GetTemplatePath = “”
End Select
End Function

4. 現場のプロがこだわる「極限の知見」

① `FileOpenEx` ではなく `FileNew` を使え

既存の`.mpp`を開く場合は`FileOpenEx`だが、テンプレートから新規作成する場合は必ず`FileNew`の`Template`引数を使用せよ。これにより、MS Projectは「新しいプロジェクトID」を内部的に採番し、古いプロジェクトのメタデータを完全に遮断した状態でインスタンス化される。

② ベースライン設定の「タイミング」

コード内で `BaselineSave` を呼び出している点に注目してほしい。
実務において、プロジェクトが作成された瞬間の「初期状態」を記録しておくことは、後のアーンドバリュー分析(EVA)において極めて重要だ。自動化プロセスの中にベースライン設定を組み込むことで、「ベースラインを引き忘れたので進捗遅延が追えない」というPMの初歩的なミスをシステム側で防止できる。

③ ユーザー定義フィールド(Enterprise Custom Fields)の衝突回避

テンプレート側でカスタムフィールド(Text1, Cost1等)に名前を付けている場合、動的生成時にそれらが正しく引き継がれているかを検証する必要がある。もしProject Server/Project Online(エンタープライズ環境)を利用している場合は、`Global.mpt`との同期タイミングで競合が発生しやすい。このコードのように、テンプレートをローカルまたは共有フォルダの`.mpt`として独立させておくことで、サーバー側の設定に依存しない「堅牢なポータビリティ」を確保できる。

5. 終わりに:自動化の真価

プロジェクト管理の自動化とは、単に「楽をする」ことではない。「管理の品質を均質化し、人為的ミスを物理的に不可能にする構造を作ること」である。

今回紹介したファクトリパターンを導入すれば、プロジェクトの立ち上げ期における煩雑な設定作業は一瞬で終わり、PMは本来の仕事である「意思決定」と「リスク管理」に集中できるようになる。

君が作るツールが、組織のプロジェクトマネジメントの基準(スタンダード)を底上げすることを期待している。さらなる高みを目指せ。

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