【入門編】【中級者向け】ベースラインの比較と差分レポートの自動生成 – Project VBA解析バイブル

スポンサーリンク

プロジェクトマネジメントを自動化せよ:ベースライン乖離レポートの極意

こんにちは。現場で泥臭く、かつスマートに自動化を追求するエンジニアの皆さん。
「マクロの記録」で生成される退屈なコードを卒業し、Project VBAという深い森に足を踏み入れたあなたを歓迎します。

今日は、プロジェクト管理の要である「ベースライン」を扱います。計画(Baseline)と実績(Actual)の乖離をExcelに書き出し、進捗の歪みを可視化する。これは単なる集計作業ではなく、プロジェクトの健康状態を診断する外科手術です。

さあ、Project VBAの心臓部に触れていきましょう。

1. なぜ「ベースライン」をコードで触るのか?

手動でProjectとExcelを行き来してコピペしていませんか? それはあなたの貴重な時間を捨てる行為です。
Project VBAにおいて、ベースラインは `Task` オブジェクトのプロパティとして存在します。これをプログラムで抽出することで、定型的な報告から解放され、あなたは「真の進捗分析」に集中できるようになります。

陥りやすい罠:オブジェクトの階層構造

Projectのオブジェクトモデルは、`Project > Task > Baseline` という階層になっています。特に初心者がハマるのが、「ベースラインが存在しないタスク」へのアクセスです。存在しないデータに触れれば、容赦なく「実行時エラー」があなたを襲います。

2. 乖離抽出の心臓部:VBAコード実装

以下のコードは、現在のプロジェクトの開始日とベースラインの開始日を比較し、3日以上の遅延があるタスクをExcelに書き出すための基本テンプレートです。

Sub GenerateBaselineVarianceReport()
Dim proj As Project
Dim tsk As Task
Dim xlApp As Object
Dim xlBook As Object
Dim row As Long

Set proj = ActiveProject

‘ Excelを制御するための準備(事前バインディング推奨ですが、まずはここから)
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True

row = 1
xlBook.Sheets(1).Cells(row, 1).Value = “タスク名”
xlBook.Sheets(1).Cells(row, 2).Value = “計画開始日”
xlBook.Sheets(1).Cells(row, 3).Value = “実績開始日”

‘ 全タスクをループ処理
For Each tsk In proj.Tasks
‘ 完了タスクやサマリータスクを除外する判断ロジックを入れるのが通のやり方
If Not tsk Is Nothing Then
If tsk.Summary = False Then
‘ ベースライン1の開始日と現在の開始日を比較
‘ DateDiffで日数の差分を計算
If DateDiff(“d”, tsk.Baseline1Start, tsk.Start) > 3 Then
row = row + 1
xlBook.Sheets(1].Cells(row, 1).Value = tsk.Name
xlBook.Sheets(1).Cells(row, 2).Value = tsk.Baseline1Start
xlBook.Sheets(1).Cells(row, 3).Value = tsk.Start
End If
End If
End If
Next tsk

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

3. コードの「魂」を解説する

オブジェクトの生存確認:`If Not tsk Is Nothing`

Projectのタスクコレクションには、途中に「空白」や「無効なデータ」が混ざることがあります。`If Not tsk Is Nothing` という一文は、あなたのコードが急なエラーで停止するのを防ぐ「盾」です。これを書かないエンジニアは、現場で信頼を失います。

`Baseline1Start` という魔法のプロパティ

Project VBAでは `Baseline` プロパティの後に数字(1〜10)を置くことで、保存した複数のベースラインにアクセスできます。`Baseline1` はプロジェクト開始時の計画値として、最後まで大事に守り抜くべき聖域です。

4. さらなる高みへ:エンジニアとして成長するために

このコードが動いたら、次は以下のステップに挑戦してください。

  • エラーハンドリングの実装: `On Error GoTo` を使い、予期せぬ中断を制御する。
  • イベント駆動: ファイル保存時に自動でレポートを生成するようにする。
  • データの正規化: 取得したデータをCSVとして出力し、BIツール(Power BI等)へ繋ぎこむ。

最後に

Project VBAは、ただの「自動化ツール」ではありません。それは、不透明なプロジェクトの闇を照らす灯火です。
今日書いたその数行のコードが、誰かの残業を減らし、プロジェクトの成功確率を0.1%でも高める。それがエンジニアの矜持というものです。

ここをクリアしたあなたなら、もう立派な自動化エンジニアです。次の課題は「全プロジェクトの一括集計」ですね。また現場でお会いしましょう。

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