【入門編】リソースの稼働率をグラフ化してボトルネックを特定するプロ向け手法 – Project VBA解析バイブル

スポンサーリンク

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の深淵はまだまだ奥が深いですよ。一歩ずつ、確実にマスターしていきましょう。応援しています。

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