【入門編】【中級者向け】複数のプロジェクトファイルを結合してマスタープロジェクトを自動生成するマクロ – Project VBA解析バイブル

スポンサーリンク

伝説の自動化術:複数のプロジェクトを統合し、最強のマスタープロジェクトを生成せよ

こんにちは。Project VBAの深淵を歩む君へ。
「マクロの記録」という安全圏から一歩踏み出し、プログラムでプロジェクトの運命を操ろうとしているその姿勢、実に素晴らしい。

今日は、複数のサブプロジェクトをフォルダから一瞬で吸い上げ、一つの「マスタープロジェクト」として結合する自動化術を授けよう。これは単なるファイル操作ではない。複数のプロジェクトの「関係性」をコードで定義する、アーキテクトへの第一歩だ。

1. なぜ「マスタープロジェクト」なのか?

現場では、プロジェクトが肥大化すると管理不能になる。そこで、個別のサブプロジェクトに分割し、それらを統合する「マスター」を作るのが常套手段だ。

しかし、手動で10個、20個のファイルをリンクしていくのは地獄への入り口だ。「フォルダに突っ込んだら自動で統合される」。この仕組みさえあれば、君は管理作業から解放され、本来のプロジェクトマネジメントに集中できる。

2. 魔法のコード:フォルダ統合マクロ

以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてみてほしい。`Scripting.FileSystemObject`(FSO)を使ってフォルダを探索し、`Subprojects.Add` メソッドで魔法をかける。

Sub GenerateMasterProject()
Dim projApp As Object
Dim masterProj As Project
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String

‘ — 設定エリア —
folderPath = “C:\ProjectFiles\SubProjects\” ‘ サブプロが集まるフォルダ
‘ ——————

Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(folderPath)

‘ 新規プロジェクトを立ち上げる
Set masterProj = Application.Projects.Add

‘ フォルダ内のファイルを順次リンク
For Each file In folder.Files
‘ mppファイルのみを対象にする
If LCase(fso.GetExtensionName(file.Name)) = “mpp” Then
‘ ここが心臓部!サブプロジェクトとして挿入
masterProj.Subprojects.Add Name:=file.Path
End If
Next file

MsgBox “マスタープロジェクトの生成が完了しました。”, vbInformation
End Sub

3. コードの心臓部を解剖する

初心者が躓きやすいポイントを、エンジニアの視点で解説しよう。

① `Application.Projects.Add` の重み

このメソッドは、メモリ上に新しい「器」を作る。注意すべきは、この時点ではまだファイルとして保存されていないことだ。後続の処理で `masterProj.SaveAs` を呼び出す必要がある。

② `Subprojects.Add` の本質

これが今回のキモだ。このメソッドは、単にファイルを開くのではない。「外部ファイルへの参照(リンク)」を作成する。

  • 注意点: リンク先が移動したり、名前が変わるとリンク切れを起こす。そのため、このマクロを運用する際は、サブプロジェクトの配置場所を固定する運用ルールが必須となる。

③ なぜ `Scripting.FileSystemObject` を使うのか?

VBA標準の `Dir` 関数を使ってもいいが、`FSO` は「オブジェクト指向」で扱いやすい。フォルダやファイルの存在確認、拡張子の取得が圧倒的に直感的だからだ。プロとしてのコードの可読性を上げるなら、FSO一択だ。

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

  • 「リンクが重複する」問題:

もしこのマクロを同じマスターファイルで何度も実行すると、サブプロジェクトが二重に登録されてしまう。実行前に `masterProj.Subprojects.Clear` を入れるか、マスタープロジェクトを毎回「新規作成」するように設計するのが定石だ。

  • パスの罠:

フォルダパスの末尾に `\` を忘れていないか? `folderPath` の設定は慎重に行おう。

  • 権限エラー:

サブプロジェクトが他人に編集中で「読み取り専用」になっている場合、リンク挿入時に警告が出る可能性がある。運用前に `Application.DisplayAlerts = False` で一時的に警告を抑止するのも一つのテクニックだ。

5. 次のステップへ

君が今日書いたのは、単なる自動化コードではない。「プロジェクト間の依存関係をプログラムで制御する」という強力な武器だ。

この次は、サブプロジェクトごとに「ベースライン」を一括で設定するロジックを組んでみるといい。プロジェクト管理の世界は、コードで自動化すればするほど、より本質的な「進捗の可視化」に時間を割けるようになる。

ここをクリアした君なら、もう「マクロの記録」を卒業したも同然だ。迷ったらまたここへ戻ってくるといい。君の業務自動化の旅を、私はいつでも応援しているよ。

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