【入門編】タスクの「概要タスク」のみを抽出してサマリーレポートを作成するVBA – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「骨組み」だけを抜き出す: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の初級者を卒業です!

さあ、自動化の世界を楽しみましょう。

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