【入門編】Assignment.Workを操作してリソースの稼働率を平準化するテクニック – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「炎上」をコードで防ぐ:Project VBAによるリソース平準化の極意

こんにちは。プロジェクトの現場で日々、スケジュールという名の「生き物」と格闘している皆さん。

「特定の人にタスクが集中してパンクしている……」
「かといって標準の平準化機能を使うと、スケジュールがバラバラに崩れて制御不能になる……」

そんな悩みを抱えていませんか?今日は、そんな現場の駆け込み寺となる「Project VBAによるリソース負荷平準化の技術」について、現場の最前線で培った知見を共有します。

マクロの記録から一歩先へ進み、プロジェクトの「神」になるための第一歩を一緒に踏み出しましょう。

—

1. なぜ「標準機能」ではなく「VBA」なのか?

Microsoft Projectの標準機能である「リソース平準化」は強力ですが、時として「あまりに機械的」です。「この作業は絶対にAさんにやってほしいが、負荷は週40時間以内に収めてほしい」といった、現場の微妙なニュアンスを汲み取るには、VBAによる直接制御が不可欠です。

特に `Assignment.Work` プロパティを操作することで、タスク単位での工数割り当てを自在にコントロールできるようになります。

—

2. 開発の舞台裏:構造を理解する

VBAを触る前に、このオブジェクトの階層構造をイメージしてください。

  • Project(プロジェクト全体)
  • Task(作業)
  • Assignment(誰が、その作業を、どれくらいやるか)

「リソース平準化」とは、特定の期間における Assignment(割り当て)のWork(工数)の合計 を、リソースの許容範囲内に収める作業に他なりません。

—

3. 実践:リソース負荷を平準化するコード

まずは、特定の期間におけるリソースの過負荷を検知し、自動的に工数を調整(平準化)するための基本的なコードを紹介します。

Sub BalanceResourceWork()
Dim tsk As Task
Dim asn As Assignment
Dim targetResource As String
Dim maxHoursPerWeek As Double

‘ 設定:特定の担当者と週の最大稼働時間
targetResource = “山田太郎”
maxHoursPerWeek = 40 ‘ 時間単位

‘ プロジェクト内の全タスクを走査
For Each tsk In ActiveProject.Tasks
If Not tsk Is Nothing Then
‘ タスクに割り当てられているリソースを確認
For Each asn In tsk.Assignments
If asn.ResourceName = targetResource Then
‘ ここで工数を調整
‘ 例:もし工数が40時間を超えていたら自動で調整するロジック
If asn.Work / 60 > maxHoursPerWeek Then ‘ Workは分単位で保持されるため60で割る
Debug.Print “調整対象: ” & tsk.Name
asn.Work = maxHoursPerWeek 60
End If
End If
Next asn
End If
Next tsk

MsgBox “リソース平準化のチェックが完了しました。”
End Sub

コードの重要ポイント解説

  • Assignment.Workの単位: Projectの内部データでは工数は「分」単位です。そのため、時間で計算したい場合は必ず60で割る、あるいは掛ける計算が必要です。ここを忘れると、計算が60倍になって大惨事になります。
  • If Not tsk Is Nothing: Projectのタスクループでは、削除された行などが `Nothing` として残ることがあります。これをチェックせずにアクセスするとエラーで落ちます。現場エンジニアの必須の作法です。

—

4. 陥りやすい罠と解決策

①「工数を減らしたら期間が伸びないか?」

`Assignment.Work` をいじると、Projectは「工数が減った分、期間(Duration)を短くするのか、あるいは同じ期間でゆっくりやるのか」を判断しようとします。
もし期間を固定したい場合は、`tsk.FixedDuration = True` を設定してから工数調整を行ってください。

②「再計算のタイミング」

VBAで値を書き換えても、画面上の表示がすぐに更新されないことがあります。コードの最後には `Application.CalculateAll` を入れるのが、確実なプロフェッショナルの手順です。

—

5. 最後に:エンジニアとしての心構え

リソース平準化は、単なる数値調整ではありません。「誰に、いつ、どれだけの負荷がかかっているか」という血の通ったデータと向き合うことです。

VBAを使って負荷を平準化することは、チームメンバーのストレスを減らし、プロジェクトを成功させるための「思いやり」を実装することに他なりません。

まずは小さなタスクグループから試してみてください。ここをクリアすれば、あなたはもうただの「マクロ利用者」ではなく、「プロジェクトのフローを設計するエンジニア」の仲間入りです。

何か詰まったら、いつでも戻ってきてくださいね。応援しています!

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