Project VBAの深淵へ:リソース稼働率を「見える化」し、ボトルネックを狩る極意
こんにちは。現場の最前線でVBAと格闘してきた皆さんに、今日は少しだけ「一段上の世界」へ案内しましょう。
MS Projectの「リソース使用状況ビュー」を眺めて溜息をつくのはもう終わりです。今日は、Project VBAを駆使して、リソースの稼働データを「CSV(あるいはExcel)」という名の戦場に引きずり出し、ボトルネックを数学的に特定する極限のロジックを授けます。
—
なぜ「マクロの記録」では限界があるのか
Projectの自動化で最も陥りやすい罠。それは、「GUIの操作をコードに変換しようとすること」です。
リソースの稼働率は、単なるプロパティの参照ではありません。`TimephasedData`(時系列データ)という、Projectの心臓部とも言えるオブジェクトを扱う必要があります。これは「いつ、誰が、何時間使われているか」という膨大な履歴の塊です。
これを理解すれば、あなたはもう「VBA初心者」ではありません。Projectの構造を掌握したエンジニアの入り口に立っています。
—
ステップ1:データ抽出の心臓部を知る
リソースの稼働を特定するには、`Assignment`(割り当て)オブジェクトの `TimephasedData` プロパティを叩くのが定石です。
Sub ExtractResourceWork()
Dim proj As Project
Dim res As Resource
Dim asgn As Assignment
Dim tp As TimephasedData
Set proj = ActiveProject
‘ 各リソースの割り当てを巡回する
For Each res In proj.Resources
If Not res Is Nothing Then
For Each asgn In res.Assignments
‘ 割り当て期間内の時系列データを取得
‘ pjTimephasedWork は「作業時間」を指す
For Each tp In asgn.TimephasedData(asgn.Start, asgn.Finish, pjTimephasedWork)
‘ ここでデータをExcelシートやCSVに書き出す
Debug.Print res.Name & “,” & tp.Start & “,” & tp.Value / 60 & “h”
Next tp
Next asgn
End If
Next res
End Sub
ここがプロの視点:なぜ `Value / 60` なのか?
Projectの内部データ単位は「分」です。画面上では「時間」で表示されていても、VBAで叩くと「分」で返ってきます。ここを理解せずに出力すると、グラフが60倍に跳ね上がり、マネジメント層に大恥をかくことになります。注意してくださいね。
—
ステップ2:ボトルネックを特定する「魔法のロジック」
ただデータを出すだけでは、単なる事務作業です。エンジニアの仕事は「異常値」を炙り出すこと。
以下の考え方をコードに組み込んでください。
1. 「閾値」を設定する: 1日8時間稼働のリソースに対し、7時間以上の割り当てがある日を「危険日」と定義する。
2. フラグを立てる: 出力時に `If tp.Value / 60 > 7 Then` のような条件分岐を入れ、CSVに「警告フラグ」を立てる。
これだけで、膨大なデータから「誰が、いつ、パンクしそうか」が一目で分かる「異常検知リスト」が出来上がります。
—
ステップ3:陥りやすい罠と対策
初心者が必ずハマるポイントを3つだけ教えます。
- 空リソースの罠: `If Not res Is Nothing` のチェックを怠ると、Project内に残った「見えないゴミデータ」でエラーが頻発します。
- 計算のオーバーフロー: `TimephasedData` は期間を細かく切ると数万行になることがあります。Excelへの書き出しは `Cells(i, j) = …` と繰り返すのではなく、配列に格納して一気に吐き出す手法(Range.Value = Array)を使ってください。速度が100倍違います。
- プロジェクト終了日の考慮: `asgn.Finish` がプロジェクト全体終了日を超えているケースがあります。必ず `ProjectSummaryTask.Finish` との比較を入れてください。
—
最後に:あなただけの「ダッシュボード」へ
抽出したデータをPython(Pandas/Matplotlib)に渡せば、瞬時にヒートマップが完成します。
1. VBAでProjectからデータを抽出
2. CSVとして書き出す
3. Pythonで読み込み、リソース負荷を可視化
このワークフローを構築できれば、あなたは「ツールに振り回されるユーザー」から、「リソースの神を見るアーキテクト」へと進化します。
「ここが動かない」「もっと深い最適化が知りたい」という壁にぶつかったら、またいつでも相談してください。Projectの深淵はまだまだ奥が深いですよ。一歩ずつ、確実にマスターしていきましょう。応援しています。
