Project VBAを掌握せよ:Taskの「Notes」を抽出し、議事録を自動生成する極意
こんにちは。現場で泥臭く、しかし誰よりも美しく自動化を追求するエンジニアです。
Microsoft Project(MS Project)を単なる「ガントチャート作成ツール」だと思っていませんか?実はその裏側には、広大なオブジェクトモデルが広がっています。特に「TaskのNotes(メモ)」は、プロジェクトの思考が刻まれた宝庫です。
今回は、このNotesをVBAで自在に操り、議事録を自動生成する手法を伝授します。ここをクリアすれば、あなたは「Project VBAの入り口」を完全に突破したことになります。
—
1. Project VBAの「地図」を頭に入れる
VBAを触る前に、Projectという巨大なシステムの構造を理解しましょう。
- Application: 司令塔。Project全体を管理します。
- Project: 作業中のファイルそのもの。
- Task: 作業の最小単位。ここに「Notes」というプロパティが隠れています。
「Notes」へのアクセスは、実は少し癖があります。
単なる文字列プロパティではなく、Projectの内部エンジンが管理するRTF(リッチテキスト)形式に近い状態で保持されているからです。しかし、VBAの `.Notes` プロパティを使えば、シンプルに文字列として抽出可能です。
—
2. 実践:TaskのNotesを抽出し、ログへ書き出す
まずは、現在のプロジェクトの全タスクから、Notesが空ではないタスクを抽出し、イミディエイトウィンドウに出力する基本コードを見てみましょう。
Sub ExportTaskNotes()
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
If Trim(tsk.Notes) <> “” Then
‘ タスク名とメモを整形して出力
Debug.Print “【タスク】: ” & tsk.Name
Debug.Print “【メモ内容】: ” & vbCrLf & tsk.Notes
Debug.Print “——————————-”
End If
End If
Next tsk
MsgBox “抽出が完了しました!”
End Sub
このコードのポイント
- `If Not tsk Is Nothing`: Project VBAで最も重要な安全策です。削除されたタスクや空の行が混ざる可能性があるため、必ずこのチェックを入れましょう。
- `Trim(tsk.Notes)`: 余計な空白や改行コードを除去します。これを怠ると、空のメモが大量に抽出されるノイズに悩まされます。
—
3. 次のステップ:ExcelやWordへ転記する「橋渡し」
イミディエイトウィンドウに出力するだけでは、現場の報告書には使えませんね。外部アプリケーション(ExcelやWord)と連携するには、「参照設定」が必要です。
VBAエディタのメニューから `ツール > 参照設定` を開き、以下にチェックを入れてください。
- Microsoft Excel 16.0 Object Library (あるいは使用中のバージョン)
こうすることで、コード内で `Dim wb As Excel.Workbook` といった宣言が可能になり、ProjectからExcelを自在に操れるようになります。
—
4. 陥りやすい罠とエンジニアの心得
初心者が必ずハマるポイントを、あらかじめ共有しておきます。
1. RTFデータの扱い:
`Notes` プロパティは非常に長いテキストや特殊文字を含むことがあります。もしExcelのセルに貼り付けてレイアウトが崩れるなら、`Replace(tsk.Notes, vbCrLf, ” “)` のように改行をスペースに置換する処理を挟んでください。
2. パフォーマンスの罠:
タスク数が数千件あるプロジェクトで、毎回 `ActiveProject.Tasks` にアクセスし続けると処理が重くなります。ループ処理が必要な場合は、一度メモリ上の配列に情報を格納してから転記処理を行うのが、伝説のエンジニアへの第一歩です。
3. マクロの記録を信じすぎるな:
ProjectにはWordやExcelのような「マクロの記録」機能が非常に貧弱です。そのため、基本的には「オブジェクトモデル図」を眺めながら自分でコードを書く習慣をつけるのが、結果的に一番の近道です。
—
最後に:自動化は「思考の効率化」である
議事録を自動生成するということは、単に「転記作業を減らす」ことではありません。「プロジェクトの経緯をいつでも引き出せる状態にする」という、ナレッジマネジメントの土台を作ることです。
今回のコードをベースに、タスクの進捗状況(`% Complete`)を条件に加えたり、特定のリソース(担当者)でフィルタリングしたりしてみてください。
「コードを書くこと」は「ツールを使うこと」ではありません。「ツールにあなたの意思を吹き込むこと」です。ぜひ、自分だけの最強の自動化ツールを育て上げてください。
また次の極限の知見でお会いしましょう。質問があればいつでもどうぞ。
