【入門編】【初心者向け】ベースライン設定後の進捗率を自動計算して別シートへ出力する仕組み – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理の「現在地」を掴む: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秒」に変わります。焦る必要はありません。まずはこのコードをコピーして、ご自身のプロジェクトファイルで実行してみてください。

動いた瞬間の感動こそが、エンジニアへの第一歩です。困ったことがあれば、いつでもまた聞きに来てくださいね。応援しています!

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