プロジェクトマネジメントを自動化せよ:ベースライン乖離レポートの極意
こんにちは。現場で泥臭く、かつスマートに自動化を追求するエンジニアの皆さん。
「マクロの記録」で生成される退屈なコードを卒業し、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%でも高める。それがエンジニアの矜持というものです。
ここをクリアしたあなたなら、もう立派な自動化エンジニアです。次の課題は「全プロジェクトの一括集計」ですね。また現場でお会いしましょう。
