プロジェクトの「骨組み」だけを抜き出す:Project VBAによるサマリーレポート自動作成術
こんにちは。現場で泥臭く、かつスマートな自動化を追求しているエンジニアです。
Project VBAを触り始めると、誰もが一度は「タスクが多すぎて、全体像が掴めない!」という壁にぶつかります。特にWBS(タスクの階層構造)が深くなればなるほど、現場の進捗管理は迷宮入りしますよね。
今回は、そんな複雑なプロジェクトから「概要タスク(サマリータスク)」だけをピンポイントで抽出し、進捗状況を一覧化する魔法のようなマクロを伝授します。
「マクロの記録」を卒業し、Projectのデータ構造を支配する第一歩を一緒に踏み出しましょう。
—
1. Project VBAの「心臓部」を理解する
まず、Project VBAを攻略する上で絶対に必要な概念が「オブジェクトモデル」です。
- Application: Projectそのもの
- ActiveProject: 今開いているファイル
- Tasks: タスクの集まり(コレクション)
- Task: 個々のタスク(名前、開始日、終了日、進捗率などを持つ)
今回扱う「概要タスク」かどうかを見分けるには、Taskオブジェクトの `Summary` プロパティを使います。これが `True` なら概要タスク、`False` なら個別の作業タスクです。シンプルでしょう?
—
2. サマリータスク抽出マクロ
では、早速コードを見ていきましょう。このコードは、開いているプロジェクトから「概要タスク」を抽出し、その名前と進捗率をイミディエイトウィンドウに書き出します。
Sub ExtractSummaryTasks()
‘ 変数の宣言:メモリを効率的に使うため、型を明示します
Dim tsk As Task
Dim proj As Project
Set proj = ActiveProject
Debug.Print “— プロジェクト概要レポート —”
‘ プロジェクト内の全タスクをループ処理
‘ Project VBAでは、タスクの階層に関わらず全タスクを順に辿ります
For Each tsk In proj.Tasks
‘ 削除されたタスクなどの「空のタスク」を除外するチェック
If Not tsk Is Nothing Then
‘ Summaryプロパティで概要タスクかを判定
If tsk.Summary = True Then
‘ イミディエイトウィンドウに出力(必要に応じてExcelへ出力も可能)
Debug.Print “タスク名: ” & tsk.Name & _
” / 進捗率: ” & tsk.PercentComplete & “%”
End If
End If
Next tsk
Debug.Print “— レポート完了 —”
End Sub
—
3. このコードの「ここがポイント」
- `If Not tsk Is Nothing Then` の重要性
Projectのタスクコレクションには、途中で行を削除した際に「Nothing(空っぽの器)」が残ることがあります。これを無視するとエラーで止まってしまうため、必ずチェックを入れるのがプロの作法です。
- 階層構造を意識しないループ
`For Each` は、インデントの深さに関係なく全タスクを上から順に走査します。これが「効率的なフィルタリング」を可能にする鍵です。
—
4. よくあるエラーと対策
初心者が必ずと言っていいほど躓くのが以下の2点です。
1. 「オブジェクト変数またはWithブロック変数が設定されていません」
- 原因:`Set proj = ActiveProject` を忘れている、あるいはプロジェクトが開かれていない。
- 対策:必ず `ActiveProject` を変数にセットしてから処理を開始しましょう。
2. インデント階層を指定したい場合
- 今回はすべての概要タスクを出しましたが、「レベル1の概要だけ欲しい」という場合は `If tsk.OutlineLevel = 1 Then` と条件を追加するだけで制御可能です。
—
5. 次のステップへ
今回のコードは「イミディエイトウィンドウ」に出力するシンプルなものですが、これを応用すれば、Excelを立ち上げてセルに自動転記し、そのまま上司への報告メールを作成するといった高度な自動化へ繋げることができます。
Project VBAを使いこなせるようになると、これまで数時間かけていたレポート作成が、わずか数秒で終わるようになります。それは単なる「時短」ではなく、あなたが「プロジェクトの全体像をコントロールできるようになった」という証拠です。
まずはこのコードをコピーして、ご自身のプロジェクトで試してみてください。何か不明点があれば、いつでも聞いてくださいね。ここをクリアすれば、あなたはもうProject VBAの初級者を卒業です!
さあ、自動化の世界を楽しみましょう。
