【入門編】タスクの工数見積もりからリソース割り当てを自動算出する計算ロジック – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理の「神」になる:Project VBAでタスク工数とリソースを自動最適化する極意

こんにちは。現場の最前線で自動化アーキテクトをしている私から、今日は「Project VBAによるリソース自動割り当て」という、プロジェクト管理の聖杯とも言える領域についてお話しします。

「マクロの記録」を卒業し、Projectのオブジェクトモデルを支配下に置くことは、単なる効率化ではありません。それは、不透明なプロジェクトの霧を晴らし、計算可能な未来を設計する力を持つことです。

さあ、泥臭い手作業から解放され、真のエンジニアリングの世界へ足を踏み入れましょう。

—

1. なぜ「自動割り当て」が必要なのか?

プロジェクトの規模が大きくなると、タスクの工数に対して「誰が、いつ、どれだけ稼働できるか」を管理するのは人間には限界が来ます。

  • 見積もりと現実の乖離
  • 特定のメンバーへの負荷集中
  • 手作業による転記ミスの連鎖

これらを解決するのが、Projectの「Assignment(割り当て)」オブジェクトを直接制御するVBAの力です。

—

2. 核心:Project VBAのオブジェクト階層を理解する

Project VBAを扱う上で、まずはこの3つの階層を頭の中に刻んでください。

1. Project(プロジェクト全体)
2. Task(タスク:何をするか)
3. Resource(リソース:誰がやるか)
4. Assignment(割り当て:タスク×リソースの結合点)

「Assignment」は、ただの紐付けではありません。「タスクの工数」と「リソースの稼働可能時間」が交差する、プロジェクトの経済活動そのものです。

—

3. 実践:タスク工数から自動アサインするコード

それでは、特定のタスクに対して、工数に基づいた割り当てを自動生成するコードを見てみましょう。

Sub AutoAssignResource()
Dim proj As Project
Dim tsk As Task
Dim res As Resource
Dim assn As Assignment

Set proj = ActiveProject

‘ プロジェクト内の全タスクをループ
For Each tsk In proj.Tasks
‘ 完了済みやサマリータスクはスキップ(重要:バグの温床になります)
If Not tsk Is Nothing And Not tsk.Summary Then
‘ 例えば「開発」という名前のタスクにリソースを割り当てる想定
If InStr(tsk.Name, “開発”) > 0 Then

‘ リソースが既に割り当てられていないか確認してから生成
If tsk.Assignments.Count = 0 Then
‘ リソース「山田太郎」をIDで取得し割り当て
‘ Work(工数)はタスクのDurationから自動算出される
Set assn = tsk.Assignments.Add(TaskID:=tsk.ID, ResourceID:=1)

‘ 割り当て率を100%に設定
assn.Units = 1

Debug.Print “タスク: ” & tsk.Name & ” にリソースを割り当てました。”
End If
End If
End If
Next tsk

MsgBox “割り当て処理が完了しました。”, vbInformation
End Sub

このコードのポイント

  • `Not tsk.Summary` のチェック: これを忘れると、サマリータスク(親タスク)に工数を割り当ててしまい、プロジェクトの計算が壊滅します。初学者が最も陥る罠です。
  • `tsk.Assignments.Add`: これが心臓部です。ここで「どのタスクに」「どのリソースを」結合するかを決定します。

—

4. 陥りやすいエラーと回避策

① 「リソースが存在しない」エラー

リソース名で指定しようとすると、同姓同名や表記揺れで死にます。必ず `ResourceID` を使用してください。 リソースリストはデータベースとして一意なIDで管理するのが鉄則です。

② 計算の不整合(WorkとDuration)

Projectには「工数(Work)=期間(Duration)×稼働率(Units)」という基本式があります。VBAで `Units` を触ると、期間が自動計算されてスケジュールが崩れることがあります。

  • 対策: 重要な計算の前後には `Application.Calculation = pjManual` を挟み、最後に自動計算を走らせることで、プロジェクト全体の計算負荷を抑えつつ整合性を保てます。

—

5. 次のステップへ:プロへの道

ここまでで、あなたは「タスクに人を割り当てる」という第一歩を踏み出しました。
次は、リソースの「空き時間(Availability)」をAPIで取得し、空いている人に自動で仕事を振るという、「リソース平準化の自動化」に挑戦してみてください。

Project VBAは、一度味方につければ、あなたのプロジェクト管理能力を10倍に引き上げてくれる最強の武器になります。

「ここが動かない」「もっと高度なロジックを組みたい」という時は、いつでも聞いてください。壁を越えた先にある景色を、一緒に見に行きましょう。

—
エンジニアとしての心得:
自動化コードを書くときは、常に「このロジックは他人が読んだときに、プロジェクトの意図を正しく反映しているか?」を自問自答してください。それが、ただのプログラマーと、価値を生むアーキテクトの境界線です。

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