プロジェクト管理の「地獄」から脱出せよ:VBAで実現する依存関係の自動ドキュメント化
こんにちは。プロジェクトの現場で、誰がどのタスクを待っているのか、進捗会議のたびにExcelとProjectを行ったり来たりして消耗していませんか?
「マクロの記録」を卒業し、Project VBAの世界に足を踏み入れたあなたへ。今日は、タスクの「メモ」フィールドを賢く使い、複雑な依存関係をMarkdown形式で一瞬にして可視化する「魔法のコード」を伝授します。
これは単なる自動化ではありません。あなたのプロジェクトを「ブラックボックス」から「透明な資産」へと変えるための第一歩です。
—
1. なぜ「メモ」フィールドなのか?
Projectには「先行タスク」という標準機能がありますが、管理が煩雑になりがちです。そこで、タスクの「メモ(Notes)」フィールドに、あえて人間が読みやすい形式で依存情報を書いておく手法を推奨します。
例えば、メモ欄にこう書きます:
`DependsOn: [タスクID: 5, 8]`
これをVBAで拾い上げ、Markdownのリスト形式に書き出すだけで、会議用の資料は数秒で完成します。
—
2. 依存関係抽出のメカニズム
Projectのオブジェクトモデルにおいて、タスクは `ActiveProject.Tasks` というコレクションの中に格納されています。ここをループで回し、`Notes` プロパティを解析するのが今回の戦略です。
実践コード:依存関係を抽出するVBA
このコードを標準モジュールに貼り付けて実行してください。
Sub GenerateDependencyMarkdown()
Dim tsk As Task
Dim output As String
‘ Markdownのヘッダーを作成
output = “# プロジェクト依存関係一覧” & vbCrLf & vbCrLf
‘ 全タスクをループ処理(Project VBAの基本)
For Each tsk In ActiveProject.Tasks
‘ タスクが存在し、かつメモ欄に情報がある場合のみ抽出
If Not tsk Is Nothing Then
If InStr(tsk.Notes, “DependsOn:”) > 0 Then
output = output & “
” & tsk.Name & vbCrLf
output = output & “- 依存タスク: ” & Replace(tsk.Notes, “DependsOn:”, “”) & vbCrLf
output = output & “- 担当者: ” & tsk.ResourceNames & vbCrLf & vbCrLf
End If
End If
Next tsk
‘ 結果をイミディエイトウィンドウに出力(まずはここから確認)
Debug.Print output
‘ 必要に応じてファイル出力処理をここに追記
MsgBox “Markdownの生成が完了しました!イミディエイトウィンドウを確認してください。”
End Sub
—
3. 初学者が陥りやすい「3つの罠」
このコードを書く過程で、多くの人が以下のポイントでつまづきます。ここをクリアすれば、あなたはもう初学者ではありません。
1. 「Nothing」の壁:
Projectのタスクコレクションには「削除されたタスクの空き番」が含まれることがあります。`If Not tsk Is Nothing Then` というチェックを忘れると、実行時エラー13(型不一致など)でプロジェクトが強制終了します。常に「空の箱」を警戒してください。
2. プロパティの参照先:
`tsk.Notes` は長い文字列を返します。これに対して `InStr` 関数で特定のキーワードを検索する手法は、大規模プロジェクトでも非常に高速に動作する「枯れた」テクニックです。
3. 大文字・小文字の揺らぎ:
今回は単純化していますが、実務では `UCase(tsk.Notes)` を使って大文字・小文字を統一して検索することをお勧めします。そうしないと、「dependson」と書かれただけで検索に引っかからなくなります。
—
4. 次なるステップ:自動ドキュメントの真価
このコードの素晴らしい点は、「タスクのメモ欄を書き換えるだけで、ドキュメントが自動更新される」という運用フローを作れることです。
会議の直前にこのマクロを走らせれば、最新の依存関係図が手元にあります。上司から「今のクリティカルパスはどうなっている?」と聞かれたとき、あなたはもう慌てる必要はありません。
最後に
VBAは、単なる「自動化ツール」ではありません。あなたの思考を整理し、プロジェクトの複雑性を制御するための「レバレッジ」です。
まずはこのコードを動かし、自分のプロジェクトでMarkdownが生成される感動を味わってください。ここをマスターすれば、次は外部APIと連携した自動通知や、ガントチャートの自動描画など、さらに高度な世界が見えてきます。
わからないことがあれば、いつでもまた聞きに来てください。あなたのエンジニアリングライフが、より豊かになることを応援しています!
