【入門編】タスクの「カスタムフィールド」を利用した、依存関係の「理由」を記録する監査ログ – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:タスクの「依存関係」に魂(理由)を吹き込む自動化術

こんにちは。現場で泥臭い自動化を積み重ね、VBAの深淵を覗いてきたエンジニアです。

皆さんはProject(Microsoft Project)を使っていて、こんな「モヤモヤ」を感じたことはありませんか?
「なぜこのタスクは、あのタスクが終わらないと開始できないんだっけ?」
「この依存関係、誰がどんな理由で設定したんだ?」

数ヶ月後のプロジェクトで、「理由のわからない制約」に振り回され、スケジュールが崩壊する……。これはプロの現場では「あるある」ですが、放置してはいけない致命的なリスクです。

今回は、Project VBAを駆使して「依存関係の理由をカスタムフィールドに自動刻印する」という、実務直結型の自動化術を伝授します。マクロの記録を卒業し、真の「エンジニア」への第一歩を踏み出しましょう。

1. なぜ「依存関係の理由」を記録するのか?

Projectにおける依存関係(プレデセッサ)は、単なる記号ではありません。それは「意思決定の履歴」です。

  • 監査(Audit)の観点: 「なぜこの工程が遅延したのか」を辿る際、依存関係の論理的根拠が明確であれば、責任の所在と改善策が瞬時に見えます。
  • 属人化の排除: 前任者が作った複雑な依存関係を、コードで可視化して残すことで、チーム全体の透明性を高めます。

これを手動で行うのは苦行ですが、VBAなら一瞬です。

2. 準備:カスタムフィールドを解放せよ

まず、Project側で準備が必要です。

1. Projectの「プロジェクト」タブ >「カスタムフィールド」を開く。
2. 「タスク」を選択し、「テキスト1」を選択して「名前の変更」で「依存理由ログ」と名付けます。

これが、私たちの「意思決定の記録場所」となります。

3. 実装:Project VBAで依存関係を操る

以下のコードは、選択したタスクに対して「どのタスクに依存しているか」を判定し、その「理由(例:素材納入待ち)」をカスタムフィールドに書き込むための雛形です。

Sub UpdateDependencyLog()
Dim tsk As Task
Dim pred As TaskPredecessor
Dim logMsg As String

‘ 選択中のタスクを対象にする
For Each tsk In ActiveSelection.Tasks
‘ すでに理由が書かれていないか確認(上書き防止のガード節)
If tsk.Text1 = “” Then
logMsg = “”

‘ そのタスクのすべての先行タスクをループ処理
For Each pred In tsk.TaskDependencies
‘ 依存関係の情報を文字列として構築
logMsg = logMsg & “依存元: [” & pred.FromTask.Name & “] ” & _
“理由: [システム自動追記: 順序制御のため]” & vbCrLf
Next pred

‘ カスタムフィールドに書き込み
tsk.Text1 = logMsg
End If
Next tsk

MsgBox “依存関係のログ更新が完了しました!”, vbInformation
End Sub

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

  • `ActiveSelection.Tasks`: 画面で選択したタスクだけを処理する「安全策」です。全タスクを回すと巨大プロジェクトではパフォーマンスが低下するため、まずは手動選択から始めるのがプロの流儀です。
  • `TaskDependencies` コレクション: ここがProject VBAの心臓部です。タスク同士の結びつきをオブジェクトとして取得することで、複雑な依存構造を自在に読み解くことができます。

4. 初学者が陥りやすい「罠」と回避策

VBAでProjectを操作する際、多くの人がここで躓きます。

罠1:依存関係がない時のエラー

コード内で `pred.FromTask.Name` を参照する際、もし依存関係がないタスクに対して無理にアクセスすると、エラーが発生します。
回避策: `If tsk.TaskDependencies.Count > 0 Then` といったガード節を必ず入れましょう。

罠2:無限ループ(循環参照)

依存関係をプログラムで動的に変える場合、A→B→Aのような循環参照を作ってしまう危険があります。
鉄則: 「記録するだけ」に留め、依存関係自体の操作は慎重に行うこと。自動化はあくまで「補助」であるという意識が、事故を防ぎます。

5. 最後に:自動化の先にあるもの

「マクロの記録」でコードを生成して満足していた時期を過ぎ、こうしてオブジェクトモデル(`Task`, `TaskPredecessor`)を直接操作できるようになると、見える景色が変わります。

自動化の本質は「作業を減らすこと」ではなく、「人間が本来行うべき思考の時間を確保すること」です。依存理由を自動で残すことで、あなたは「なぜこのスケジュールなのか」という本質的な議論に集中できるようになります。

ここをクリアすれば、あなたはもう立派なProject VBA使いです。
次は、このログをExcelにエクスポートしてレポート化してみるのも面白いかもしれませんね。

それでは、素晴らしい自動化ライフを!応援しています。

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