プロジェクト管理の「現在地」を掴む:Project VBAで進捗レポートを自動生成しよう
こんにちは。現場で泥臭く、かつスマートに業務を自動化しているエンジニアです。
「MS Projectでガントチャートは引いたけれど、そこから先の進捗管理が手作業で面倒……」
「ベースライン(計画)と実績の差分を、もっと簡単にExcelで見える化したい」
そんな悩みを抱えていませんか? マクロの記録から一歩踏み出し、Project VBAという強力な武器を手にすれば、その作業は「ボタン一つ」で終わります。今回は、プロジェクトの「ベースライン設定直後の状態」をExcelへスマートに掃き出す、自動化の第一歩を伝授します。
—
1. Project VBAの「心構え」:オブジェクトモデルを理解する
VBAの世界で最も重要なのは「今、どのオブジェクトを触っているか」を意識することです。MS Projectの場合、階層構造はシンプルです。
- Application(プロジェクト全体)
- Project(開いているファイル)
- Task(一つひとつのタスク)
- Baseline(計画値)
今回は「タスク」一つひとつにアクセスし、その中の「ベースライン開始日」「終了日」「進捗率」を抜き出すコードを書いていきます。
—
2. 実践:ベースライン情報をExcelに書き出すコード
このコードは、開いているプロジェクトの全タスクをループ処理し、Excelの新しいブックにデータを書き出します。
Sub ExportBaselineToExcel()
‘ Excelを制御するためのオブジェクト変数を宣言
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim t As Task
Dim i As Long
‘ Excelアプリケーションを起動(既に開いていればそれを参照)
Set xlApp = CreateObject(“Excel.Application”)
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Sheets(1)
‘ ヘッダーの設定
xlSheet.Cells(1, 1).Value = “タスク名”
xlSheet.Cells(1, 2).Value = “ベースライン開始日”
xlSheet.Cells(1, 3).Value = “ベースライン終了日”
xlSheet.Cells(1, 4).Value = “進捗率(%)”
i = 2 ‘ 2行目から書き込み開始
‘ 全タスクをループ処理
For Each t In ActiveProject.Tasks
‘ 概要タスク(サマリー)は除外して実作業タスクのみ出力
If Not t.Summary Then
xlSheet.Cells(i, 1).Value = t.Name
xlSheet.Cells(i, 2).Value = t.BaselineStart
xlSheet.Cells(i, 3).Value = t.BaselineFinish
xlSheet.Cells(i, 4).Value = t.PercentComplete
i = i + 1
End If
Next t
MsgBox “進捗レポートの出力が完了しました!”, vbInformation
End Sub
—
3. 初学者が陥りやすい「落とし穴」と対策
初めてProject VBAに触れる際、多くの人がここで躓きます。しっかりと覚えておきましょう。
① 「サマリータスク」の罠
MS Projectには、複数のタスクを束ねる「サマリータスク」が存在します。`t.Summary`プロパティを使わずに全タスクをループすると、合計値と個別のタスクが混ざり、Excel側で計算が狂います。必ず `If Not t.Summary Then` でフィルタリングする癖をつけてください。
② ベースラインが設定されていない場合
ベースラインを保存していないプロジェクトで `t.BaselineStart` を参照すると、日付が初期値(1900年など)になってしまいます。
- 対策: コードを動かす前に、必ず「プロジェクト」タブ > 「ベースラインの設定」からベースラインを保存するフローを徹底しましょう。
③ Excelとの「外部連携」の壁
今回のコードでは `CreateObject(“Excel.Application”)` を使用しました。これは「Late Binding(レイトバインディング)」と呼ばれる手法で、参照設定(ライブラリの追加)が不要なため、どの環境でも動かしやすいというメリットがあります。
—
4. さあ、次のステップへ
今回のコードはあくまで「基本のキ」です。ここから発展させて、以下のようなカスタマイズに挑戦してみてください。
1. 条件付き書式: Excel側で「進捗率が100%未満かつ期限を過ぎているタスク」に赤色をつける。
2. 自動保存: Excelファイルに「20231027_進捗レポート.xlsx」のような名前をつけて自動保存する。
3. 差分抽出: 「現在の日付」と「ベースライン終了日」を比較して、遅延日数を出力する。
Project VBAをマスターすれば、週に1時間かかっていた報告書作成が「1秒」に変わります。焦る必要はありません。まずはこのコードをコピーして、ご自身のプロジェクトファイルで実行してみてください。
動いた瞬間の感動こそが、エンジニアへの第一歩です。困ったことがあれば、いつでもまた聞きに来てくださいね。応援しています!
