【入門編】リソースの「割り当て」に対する「作業の輪郭(WorkContour)」をグラフから直接指定するUI – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:タスクの「呼吸」を操る「作業の輪郭(WorkContour)」自動化術

こんにちは。現場の最前線で自動化を極めるエンジニアとして、今日は君たちに「Project VBAの真髄」を授けよう。

多くの人が「Projectの工数入力なんて面倒だ」と嘆く。だが、それは君たちが「作業の輪郭(WorkContour)」という魔法を知らないからだ。プロジェクトの進捗は、一律のベタ塗りではない。最初は準備で重く、中盤で加速し、最後に調整で収束する……そう、プロジェクトには「呼吸」がある。

今日は、VBAフォームからその「呼吸」をタスクに一括注入する、極上の自動化ツールを構築しよう。

—

1. 「作業の輪郭(WorkContour)」とは何か?

Projectにおいて、リソースの工数配分(WorkContour)は、タスクの「伸び縮み」を制御する心臓部だ。

  • フラット(Flat): 均一に工数を割り当てる(標準)。
  • バックロード(BackLoaded): 後半に山が来る(準備期間が長いタスク向け)。
  • フロントロード(FrontLoaded): 前半に山が来る(初動が肝心なタスク向け)。

これらを手動でカチカチと右クリックメニューから選んでいるようでは、プロのエンジニアとは呼べない。コードで一瞬にして制御するのだ。

—

2. 実装の設計図:Project VBAの作法

Project VBAにおいて、タスクのリソース割り当てを操作するには `Assignment` オブジェクトを叩く必要がある。

陥りやすい罠:「タスク」と「割り当て」の混同

初心者がよくやる間違いは、タスクオブジェクトに対して直接工数配分をいじろうとすることだ。

  • タスク(Task): 仕事の枠組み
  • 割り当て(Assignment): 「誰が」「何を」するかの結合体

今回操作するのは後者だ。ここを理解すれば、君たちのコードは劇的に安定する。

—

3. 実践:作業の輪郭を操る魔法のコード

ユーザーフォームにコンボボックス(`cmbContour`)を置き、選択したタスクに対して一括適用するルーチンを記述する。

‘ 選択されたタスクの全てのリソース割り当てに対して、輪郭を適用する
Sub ApplyWorkContour(contourType As PjWorkContour)
Dim tsk As Task
Dim asn As Assignment

‘ 選択範囲がない場合のガード節(基本にして極意)
If ActiveSelection.Tasks.Count = 0 Then
MsgBox “タスクを選択してください。”, vbExclamation
Exit Sub
End If

‘ プロジェクトの再計算を抑制(パフォーマンス向上のための定石)
Application.Calculation = pjManual

On Error Resume Next ‘ 万が一の割り当てエラーを回避
For Each tsk In ActiveSelection.Tasks
For Each asn In tsk.Assignments
‘ 作業の輪郭を適用
asn.WorkContour = contourType
Next asn
Next tsk
On Error GoTo 0

‘ 最後に一括計算
Application.Calculation = pjAutomatic
Application.CalculateAll

MsgBox “作業の輪郭を適用しました。”, vbInformation
End Sub

コードの解説:ここが「プロ」のこだわり

1. `Application.Calculation = pjManual`: これを忘れると、ループのたびに再計算が走り、数千件のタスクでPCがフリーズする。現場の知恵だ。
2. `On Error Resume Next`: タスクにリソースが割り当てられていない場合、`Assignments`コレクションは空になる。エラーで止まるのではなく、静かにスキップさせるのがスマートな設計だ。

—

4. UIから呼び出すための準備

フォーム側のイベントハンドラでは、このように呼び出すと良い。

Private Sub btnApply_Click()
‘ コンボボックスの値から定数を選択
‘ 0: pjFlat, 1: pjBackLoaded, 2: pjFrontLoaded…
Dim selectedType As PjWorkContour

Select Case Me.cmbContour.Value
Case “フラット”: selectedType = pjFlat
Case “バックロード”: selectedType = pjBackLoaded
Case “フロントロード”: selectedType = pjFrontLoaded
End Select

Call ApplyWorkContour(selectedType)
End Sub

—

5. 最後に:君たちへのメッセージ

VBAは、単なる「自動化ツール」ではない。君たちの思考をプロジェクトのデータに直接投影するための「拡張現実(AR)」だ。

コードを書くとき、常に考えろ。「この処理は、プロジェクトの呼吸を妨げていないか?」と。
今回紹介した `WorkContour` の操作は、その第一歩に過ぎない。この基礎さえ固まれば、次は「稼働率の自動調整」や「コストの動的算出」といった、より高度な領域へ進めるはずだ。

「マクロの記録」ボタンを押すだけの卒業生から、Projectを自在に操るアーキテクトへ。君たちの挑戦を、心から応援している。

ここをクリアすれば、Project VBAの基本はバッチリだ。さあ、次はどんな野望をコードに書き込もうか?

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