【入門編】複数プロジェクト間でのリソース競合を可視化するダッシュボード作成 – Project VBA解析バイブル

スポンサーリンク

複数プロジェクトのリソース競合を可視化せよ:Project VBAによる「横断管理」の極意

こんにちは。現場で泥臭く、しかし誰よりもスマートに自動化を追求しているエンジニアです。

Project(Microsoft Project)を使いこなしていると、必ずぶち当たる壁があります。それは「複数のプロジェクト間で、同じメンバーがパンクしていないか?」という問題です。

リソースビューやガントチャートを1つずつ開いて確認していませんか? それは人間がやる仕事ではありません。今回は、複数の `.mpp` ファイルを横断してリソースの稼働状況を吸い上げ、Excelで可視化する「究極のダッシュボード」への第一歩を伝授します。

—

1. なぜ「横断管理」が難しいのか?(オブジェクトの罠)

Project VBAにおいて、リソース管理が難しい最大の理由は、「リソース情報はプロジェクトファイルの中に閉じて存在している」からです。

  • プロジェクトAの「佐藤さん」
  • プロジェクトBの「佐藤さん」

これらは名前が同じでも、Projectの世界では別々のオブジェクトです。これらを横断するには、すべてのプロジェクトファイルを「裏側で開く」か「マスタープロジェクト経由でアクセスする」必要があります。今回は、最も柔軟性が高い「複数のファイルをループで開いて抽出する」手法を解説します。

—

2. 開発の基本アーキテクチャ

今回のマクロが行う処理のフローは、以下の3ステップです。

1. 対象フォルダの全MPPファイルを順次オープン(バックグラウンド処理)
2. 各ファイルのリソース情報を「リソース割り当て」単位で抽出
3. Excelのシートへ書き出し、最後に閉じる

—

3. 実践:リソース集計マクロ

このコードは、ProjectのVBAエディタ(Alt + F11)に貼り付けてください。

Sub ExportResourceUtilization()
Dim proj As Project
Dim res As Resource
Dim asgn As Assignment
Dim row As Long

‘ Excelを制御するための準備
Dim xlApp As Object
Dim xlBook As Object
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add

row = 2
xlBook.Sheets(1).Cells(1, 1).Value = “プロジェクト名”
xlBook.Sheets(1).Cells(1, 2).Value = “リソース名”
xlBook.Sheets(1).Cells(1, 3).Value = “開始日”
xlBook.Sheets(1).Cells(1, 4).Value = “作業時間”

‘ 指定フォルダ内のファイルをループ処理する想定
‘ ここでは現在開いているプロジェクトを対象にする例
For Each proj In Application.Projects
For Each res In proj.Resources
‘ リソースに割り当てられたタスクをループ
For Each asgn In res.Assignments
xlBook.Sheets(1).Cells(row, 1).Value = proj.Name
xlBook.Sheets(1).Cells(row, 2).Value = res.Name
xlBook.Sheets(1).Cells(row, 3).Value = asgn.Start
xlBook.Sheets(1).Cells(row, 4).Value = asgn.Work / 60 ‘ 分換算
row = row + 1
Next asgn
Next res
Next proj

xlApp.Visible = True ‘ Excelを表示
MsgBox “集計完了!これで競合は丸見えです。”
End Sub

—

4. 陥りやすいエラーと回避策(ここが重要!)

初学者が必ず突き当たる「壁」がいくつかあります。

  • 「Object Required」エラー:

これは `Set` を忘れている時に発生します。特にExcelを操作する場合、`Set xlApp = CreateObject(“Excel.Application”)` を忘れると、Excelがメモリに常駐したまま消えない「ゾンビプロセス」が発生します。コードの最後には必ず `Set xlApp = Nothing` を置く癖をつけましょう。

  • 計算の単位(Work):

Projectにおける `Assignment.Work` は「分(Minute)」単位で格納されています。これに気づかず「1日8時間」のつもりで計算すると、数値が60倍になって大混乱します。必ず `/ 60` してください。

  • ファイルが開けない問題:

`Application.Projects` をループする際は、すでに開いているファイルしか対象になりません。実務では `Dir` 関数を使ってフォルダ内の全MPPを `Application.FileOpen` で開きながら処理するロジックを組むのがプロの流儀です。

—

5. 次のステップ:ダッシュボード化への道

このマクロでExcelにデータが吐き出せたら、あとは「Excelのピボットテーブル」の出番です。

1. 出力されたExcelにピボットテーブルを挿入する
2. 行に「リソース名」、列に「開始日(月単位)」、値に「作業時間」を入れる
3. 条件付き書式で「作業時間が160時間を超えたら赤くする」

これだけで、一目見ただけで誰がパンクしているか、どこに余裕があるかが分かる「リソース競合ダッシュボード」が完成します。

最後に:自動化は「楽をするための努力」です

最初はコードを書くのが大変に思えるかもしれません。しかし、毎週月曜日に1時間かけて行っていた手作業が、ボタン1つで1秒で終わるようになる。その快感を知ってしまったら、もう元の世界には戻れません。

このコードをベースに、自分たちのチームの運用ルールに合わせてカスタマイズしてみてください。分からないことがあれば、いつでもまた聞きに来てください。あなたの自動化の旅を、全力でサポートしますよ!

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