【入門編】リソースの「最大単位」を過去の稼働実績から自動算出する最適化マクロ – Project VBA解析バイブル

スポンサーリンク

伝説のアーキテクトが説く:Project VBAで「リソースの最大単位」を最適化する極意

こんにちは。現場の泥臭い課題をコードで解決し続けてきた、Project VBAのアーキテクトです。

「リソースの最大単位(MaxUnits)をどう設定するか?」
これはプロジェクトマネジメントの永遠の課題です。100%と設定してパンクさせたり、逆に過小評価してリソースを遊ばせたり……。経験則だけで決めるのは、もう終わりにしましょう。

今回は、過去の実績データから「真の稼働率」を導き出し、次期プロジェクトのMaxUnitsを自動更新するプロフェッショナルなアプローチを伝授します。

—

1. なぜ「MaxUnits」の最適化が重要なのか?

Projectにおける`MaxUnits`は、そのリソースがどれだけのパワーをプロジェクトに注げるかを示す「器」です。

  • 100%超え: リソースに過負荷をかけ、品質低下を招く。
  • 低すぎる設定: リソースの空き時間を可視化できず、プロジェクトの進捗にボトルネックを生む。

VBAを使えば、過去の「実稼働実績(Actual Work)」と「計画工数(Baseline Work)」の比率から、「このリソースは実際には何%で稼働するのが最適か」という真実を瞬時に算出できます。

—

2. 現場で使える!最適化ロジックの全貌

まずは、コードを見る前に「何を計算するか」を整理しましょう。

1. 過去の全タスクから、特定リソースの実績工数を抽出する
2. 計画に対する実績の乖離率を算出する
3. その乖離率を反映した「推奨MaxUnits」を導き出す

では、さっそくコードを見ていきましょう。

Sub OptimizeResourceMaxUnits()
‘ プロジェクト内のすべてのリソースを巡回
Dim res As Resource
Dim actualWork As Double
Dim plannedWork As Double
Dim performanceRatio As Double

‘ 画面更新を停止して処理を高速化
Application.ScreenUpdating = False

For Each res In ActiveProject.Resources
‘ リソースが「作業」タイプであるかを確認(材料リソースは除外)
If res.Type = pjResourceTypeWork Then

‘ 過去の実績と計画工数を取得(単位は時間)
actualWork = res.ActualWork / 60
plannedWork = res.Work / 60

‘ 計画に対してどれだけ稼働したかの比率を計算
If plannedWork > 0 Then
performanceRatio = actualWork / plannedWork

‘ 現状のMaxUnitsを更新(例: 乖離率を反映させる)
‘ ※安全のため上限を100%に設定するロジック
res.MaxUnits = Application.Min(1, performanceRatio)

Debug.Print res.Name & ” の最適化完了: ” & (res.MaxUnits 100) & “%”
End If
End If
Next res

Application.ScreenUpdating = True
MsgBox “リソースの最適化が完了しました。”
End Sub

—

3. 初学者が陥りやすい「3つの罠」

このコードを書く上で、多くの初心者が躓くポイントがあります。ここを回避できるだけで、あなたは「脱・初心者」です。

① 「単位」の魔術(分 vs 時間)

Project VBAの内部値は、基本的に「分」で保持されています。コード内で `/ 60` を行っているのは、我々が扱いやすい「時間」に変換するためです。ここを忘れると、計算結果が60倍になってしまいます。

② リソースタイプを見極める

リソースには「作業」「材料」「コスト」の3種類があります。`res.Type = pjResourceTypeWork` というフィルターを入れないと、材料リソースの単位を書き換えようとしてエラー(または予期せぬ挙動)が発生します。

③ 画面更新(ScreenUpdating)の重要性

数千行規模のプロジェクトで一つずつリソースを操作すると、Projectは非常に重くなります。`Application.ScreenUpdating = False` を入れるだけで、処理速度は劇的に向上します。これは「プロの作法」です。

—

4. ステップアップ:さらに精度を高めるには?

上記のコードは「過去全体の平均」を見ていますが、現場の達人はさらに一歩先を見ます。

  • 期間で絞り込む: `res.ActualWork` ではなく、直近3ヶ月のデータに限定する。
  • 例外処理: 特定の熟練エンジニアだけはMaxUnitsを固定(例:120%)にする条件分岐を追加する。

Project VBAは単なる自動化ツールではありません。あなたの「マネジメントの思想」を反映させるためのキャンバスです。

—

最後に:コードは「対話」である

マクロは一度書いて終わりではありません。
「なぜこのリソースはMaxUnitsが低かったのか?」
「なぜ計画と実績がこれほど乖離したのか?」

コードが弾き出す数字を眺めながら、プロジェクトの歴史を読み解いてみてください。それができるようになった時、あなたは単なる「マクロを書く人」ではなく、真の「プロジェクト・アーキテクト」になっているはずです。

今回のコードをベースに、自分なりのロジックを組み込んでみてください。壁にぶつかったら、またここに戻ってきてください。いつでも歓迎しますよ。

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