【入門編】【中級者向け】プロジェクトの保存時に「プロジェクト統計情報」をExcelへ自動転記するワークフロー – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「今」を掴め。Project VBAで実現する、自動ログ収集の極意

こんにちは。Project VBAの世界へようこそ。
日々、MS Projectでスケジュールと格闘している皆さん。プロジェクトの進捗を報告するために、わざわざ手作業でExcelに数値を転記していませんか?

「先週の進捗率は何%だったっけ?」「コストの推移をグラフにしたいけど、データが蓄積されていない…」

そんな悩みを持つあなたへ。今日は、プロジェクトを保存するたびに、重要な統計情報を自動でExcelへ追記するという、現場で最も重宝されるワークフローを伝授します。

これは単なる自動化ではありません。あなたのプロジェクトの「履歴(ヒストリー)」を刻む、最も効率的な一歩です。

なぜ「マクロの記録」ではダメなのか?

まず、耳の痛い話から始めましょう。
ExcelのVBAには「マクロの記録」ボタンがありますが、Projectにはそれがありません。

Project VBAは、オブジェクトの階層構造を理解し、メモリ上で何が起きているかをイメージできる者だけが操れる「職人の道具」です。まずは、今回の主役となるオブジェクトを把握しましょう。

  • `ActiveProject`: 今開いているプロジェクトそのもの。
  • `Project.ProjectSummaryTask`: プロジェクト全体の進捗率やコスト情報が詰まった、いわばプロジェクトの「要約ノード」。

ここを触れるようになれば、あなたはもう初心者ではありません。

現場で使える!自動転記コードの全貌

以下のコードを、Projectの `ThisProject` モジュール(または標準モジュール)に配置してください。

‘ プロジェクト保存時に実行されるイベントプロシージャ
Private Sub Project_BeforeSave(ByVal pj As Project, ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim xlApp As Object
Dim xlWb As Object
Dim xlWs As Object
Dim filePath As String

‘ 集計用Excelファイルのパス(適宜変更してください)
filePath = “C:\Reports\ProjectLog.xlsx”

‘ Excelを制御するためのオブジェクトを生成
Set xlApp = CreateObject(“Excel.Application”)
Set xlWb = xlApp.Workbooks.Open(filePath)
Set xlWs = xlWb.Sheets(1)

‘ 次の書き込み行を探す(A列の最終行の次)
Dim nextRow As Long
nextRow = xlWs.Cells(xlWs.Rows.Count, 1).End(-4162).Row + 1 ‘ -4162 = xlUp

‘ データを転記
With xlWs
.Cells(nextRow, 1).Value = Now ‘ 日時
.Cells(nextRow, 2).Value = pj.Name ‘ プロジェクト名
.Cells(nextRow, 3).Value = pj.ProjectSummaryTask.PercentComplete ‘ 進捗率
.Cells(nextRow, 4).Value = pj.ProjectSummaryTask.Cost ‘ コスト
End With

‘ 保存して閉じる
xlWb.Close SaveChanges:=True
xlApp.Quit

‘ メモリ解放(プロの作法)
Set xlWs = Nothing
Set xlWb = Nothing
Set xlApp = Nothing

MsgBox “統計情報をログに保存しました。”
End Sub

コードのここがポイント!

1. `Project_BeforeSave` イベント:
保存ボタンを押した「その瞬間」にコードが走ります。ユーザーが意識せずともデータが溜まる仕組みです。
2. `CreateObject`:
あえてExcelを「参照設定」せず、Late Binding(後方バインディング)で作成しました。これにより、Excelのバージョン違いによるエラーを回避し、配布時のトラブルを最小限に抑えられます。
3. オブジェクトの解放:
`Set … = Nothing` を忘れないこと。これを怠ると、裏でExcelがゾンビのように残り続け、メモリを圧迫します。職人たるもの、後始末まで完璧に。

陥りやすい罠と解決策

初学者が必ず突き当たる壁が2つあります。

1. 「プロジェクトが開けません」エラー

Excelファイルが既に開かれている場合、コードは失敗します。

  • 解決策: 運用時は「ログ用のExcelは常に閉じておく」か、コード内で `If` 文を使い、既に開いているExcelがあればそれを掴むような処理に拡張しましょう。

2. 進捗率が「0%」になる

プロジェクトの「プロジェクトサマリータスク」が正しく設定されていない場合、値が取れないことがあります。

  • 確認法: プロジェクトのオプションで「プロジェクトサマリータスクを表示」にチェックが入っているか確認してください。ここが全てのデータの起点となります。

次のステップ:君だけの自動化へ

このコードを実装できたなら、次は以下のような拡張に挑戦してみてください。

  • ベースラインとの乖離: `pj.ProjectSummaryTask.BaselineCost` と比較して、予算オーバーしていないか判定する。
  • メール通知: 予算超過時に、自動でPMにアラートメールを飛ばす。

Project VBAを操れるようになると、あなたはただの「進捗入力係」から「プロジェクトの状況を可視化するアーキテクト」へと進化します。

「面倒な作業はすべて機械に任せ、人間は意思決定に集中する」。これが、エンジニアとしての理想の姿です。
ここをクリアしたあなたなら、もう大丈夫。自信を持って、次の自動化へ踏み出してください!

何か詰まったら、いつでも戻ってきてくださいね。応援しています。

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