【入門編】リソースの「過負荷」を解消するための「自動平準化」実行後の差分レポート生成 – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「炎上」を未然に防ぐ:Project VBAで実現する「平準化差分レポート」の極意

こんにちは。現場で泥臭くプロジェクトを回し、システムと格闘し続けている皆さんに、一つ問いかけたいことがあります。

「Projectの自動平準化機能、ポチッと押して満足していませんか?」

標準機能の「平準化」は強力ですが、実行した瞬間にタスクがズルズルと後ろに倒れ込み、スケジュールが崩壊する恐怖。そして「一体、どのタスクがどれだけ動いたんだ?」と頭を抱えるあの瞬間。

今日は、その「ブラックボックス」を解き明かします。VBAを使って平準化前後のスケジュールを比較し、差分をExcelに吐き出す。この一手が打てるようになれば、あなたはもう「ツールの言いなりになるPM」から卒業です。

—

1. なぜ「平準化の差分」を可視化する必要があるのか?

Projectの平準化は、リソースの負荷状況を見て、タスクを後ろにずらすという強引な最適化を行います。しかし、これでは「どのタスクに負荷が集中し、その結果、納期がどれだけ遅延したのか」という因果関係が見えません。

「なぜこのタスクが動いたのか?」をステークホルダーに論理的に説明できること。これこそが、アーキテクトに求められる真のスキルです。

—

2. 開発の舞台裏:Project VBAの基本を掴む

Project VBAはExcel VBAと似ていますが、オブジェクトモデルが少しだけ「深層」にあります。まずは、以下の3つの概念を叩き込んでください。

1. Application.ActiveProject: 今開いているプロジェクトそのもの。
2. Tasks: タスクの集合体。`Tasks(1)`のように番号でアクセスします。
3. Baseline: 平準化前の状態を保存しておく「避難場所」。

今回の戦略はこうです。
1. 現在のスケジュールを「ベースライン」にコピーする。
2. 平準化を実行する。
3. 現在の開始日とベースラインの開始日を比較し、その差分をExcelに書き出す。

—

3. 実践:平準化差分レポート生成コード

さあ、現場でそのまま使えるコードをお見せします。標準モジュールに貼り付けて実行してみてください。

Sub GenerateLevelingReport()
Dim proj As Project
Dim tsk As Task
Dim xlApp As Object, xlBook As Object, xlSheet As Object
Dim rowIdx As Long

Set proj = ActiveProject

‘ 1. 現在のスケジュールをベースライン1に保存(差分比較の基準)
proj.SaveBaseline BaselineNumber:=pjBaseline1

‘ 2. 自動平準化の実行(全リソース対象)
proj.LevelingOptions.LevelEntireProject
proj.LevelResources

‘ 3. Excelを開いてレポートの準備
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Sheets(1)

xlApp.Visible = True
xlSheet.Cells(1, 1).Value = “タスク名”
xlSheet.Cells(1, 2).Value = “平準化前開始日”
xlSheet.Cells(1, 3).Value = “平準化後開始日”
xlSheet.Cells(1, 4).Value = “移動日数(差分)”

rowIdx = 2

‘ 4. タスクをループして差分を抽出
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
‘ ベースライン1と現在の開始日を比較
If tsk.Start <> tsk.Baseline1Start Then
xlSheet.Cells(rowIdx, 1).Value = tsk.Name
xlSheet.Cells(rowIdx, 2).Value = tsk.Baseline1Start
xlSheet.Cells(rowIdx, 3).Value = tsk.Start
xlSheet.Cells(rowIdx, 4).Value = DateDiff(“d”, tsk.Baseline1Start, tsk.Start)
rowIdx = rowIdx + 1
End If
End If
Next tsk

MsgBox “レポート生成完了!プロジェクトの歪みが可視化されました。”, vbInformation
End Sub

—

4. 初学者が陥りやすい「落とし穴」

このコードを書く際、多くの人が以下のポイントでつまづきます。

  • タスクの「Nothing」判定: Projectのタスクリストには、たまに「実体のない空行」が存在します。`If Not tsk Is Nothing Then` を入れないと、容赦なくエラーで止まります。これはVBAでの基本の基本。
  • ベースラインの混同: `Baseline`(基本計画)と `Baseline1` を使い分けるのがコツです。既存の計画を壊さないよう、一時的な避難先として `Baseline1` を使うのが賢いやり方です。
  • 日付の比較: `DateDiff`関数を使いましょう。単純な引き算をすると型エラーになることがあるため、日付計算は専用の関数に任せるのがプロの作法です。

—

最後に:ツールを使いこなす側へ

ここまで理解できたあなたは、もう単なる「Projectへの入力係」ではありません。プロジェクトの「時間」と「負荷」を支配するコントローラーです。

今回のコードは、あくまで「平準化」という一つの現象を可視化したに過ぎません。ここからさらに「特定の担当者だけに絞る」「移動日数が3日以上のものだけを強調する」といったカスタマイズを加えてみてください。

VBAは、あなたの思考を拡張する魔法の杖です。ぜひ、現場の課題を一つずつ自動化して、楽に、そしてスマートに仕事を終わらせていきましょう。応援しています!

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