【入門編】Assignment.PeakUnitsを監視してリソースのピーク稼働を特定する分析スクリプト – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵へ:リソースの「過負荷」を可視化する技術

こんにちは。現場の最前線でProject VBAと格闘する皆さんに、今日は「リソース管理」という、プロジェクトの心臓部を直接叩く技術を伝授します。

「マクロの記録」から卒業した皆さんが次に直面するのは、「データはそこにあるのに、どう抽出すればいいかわからない」という壁でしょう。特に、ProjectのオブジェクトモデルはExcel VBAよりも遥かに階層が深く、独特の癖があります。

今回は、リソースの「ピーク稼働率(PeakUnits)」を監視し、限界を超えたリソースをExcelへ掃き出す、実務直結型の分析スクリプトを構築します。ここをクリアすれば、あなたはもう「VBAを使う人」から「プロジェクトを制御するエンジニア」へと進化します。

—

なぜ「PeakUnits」を監視するのか?

プロジェクト管理において、リソースの割り当ては「パズル」です。しかし、人間は都合よく稼働してくれません。ある特定期間にタスクが集中し、100%を超える稼働(オーバーアロケーション)が発生すると、スケジュールは一気に崩壊します。

`Assignment.PeakUnits`は、その割り当て期間中における最大稼働率を保持する、極めて重要なプロパティです。これを知ることは、プロジェクトの「臨界点」を知ることに他なりません。

—

実践:ピーク稼働率分析スクリプト

このコードは、Projectのデータを舐め回し、閾値(今回は80%と設定)を超えたリソースをExcelのシートに書き出します。

Sub ExportOverloadedResources()
‘ 事前準備: Excelを参照設定(Tools > References > Microsoft Excel XX.0 Object Library)
Dim proj As Project
Dim t As Task
Dim a As Assignment
Dim xlApp As Object
Dim xlBook As Object
Dim rowIdx As Long
Dim threshold As Double

Set proj = ActiveProject
threshold = 0.8 ‘ 80%を閾値に設定

‘ Excelを起動
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True

‘ ヘッダー作成
With xlBook.Sheets(1)
.Cells(1, 1).Value = “タスク名”
.Cells(1, 2).Value = “リソース名”
.Cells(1, 3).Value = “ピーク稼働率”
rowIdx = 2
End With

‘ 階層を深く潜る:タスク -> アサインメントの順でループ
For Each t In proj.Tasks
If Not t Is Nothing Then
For Each a In t.Assignments
‘ PeakUnitsは小数で保持される(100% = 1.0)
If a.PeakUnits > threshold Then
xlBook.Sheets(1).Cells(rowIdx, 1).Value = t.Name
xlBook.Sheets(1).Cells(rowIdx, 2).Value = a.ResourceName
xlBook.Sheets(1).Cells(rowIdx, 3).Value = Format(a.PeakUnits, “0%”)
rowIdx = rowIdx + 1
End If
Next a
End If
Next t

MsgBox “分析完了!Excelを確認してください。”, vbInformation
End Sub

—

知っておくべき「Project VBA」の急所

このコードを書く上で、初心者が必ずと言っていいほどハマるポイントが3つあります。

1. `If Not t Is Nothing` の重要性

ProjectのTaskオブジェクトは、マイルストーンや階層構造の「親」が含まれるため、時に「中身のない空のタスク」が存在します。これを無視して`t.Name`などを叩くと、即座にエラーで落ちます。Project VBAでは「あるはずのものがない」ことを常に疑うのが定石です。

2. アサインメント(Assignment)の階層構造

Taskの配下に複数のAssignment(リソース割り当て)が存在します。`For Each t In Tasks` の中で、さらにもう一段 `For Each a In t.Assignments` を回す構造を理解できれば、Project VBAの8割はマスターしたも同然です。

3. 数値の扱い(PeakUnits)

PeakUnitsはパーセント表示ではなく、内部的には「小数」です。100%は`1.0`、50%は`0.5`となります。コード内で閾値を設定する際、`80`と書いてしまうと「8000%」という巨大な値を探すことになり、何も抽出されません。

—

ステップアップへのアドバイス

このコードを動かせたら、次は「特定の期間内」というフィルタリングを追加してみてください。`Assignment.Start` と `Assignment.Finish` を使えば、「来週、過負荷になるリソースは誰か?」という、より経営に近い分析が可能になります。

Project VBAは、Excelよりも「生データ」を扱う感覚が強く、非常にスリリングです。エラーが出たら、まずは「そのオブジェクトが本当にそこに存在するか」を `Debug.Print` で確認する。この泥臭いデバッグこそが、伝説的なアーキテクトへの第一歩です。

さあ、あなたのプロジェクトを、もっとスマートに制御してみませんか?コードを書くことは、プロジェクトの未来を設計することと同じなのですから。

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