【実務・中級編】「マイルストーン」の自動追跡:主要イベントの依存関係を監視するダッシュボードVBA – Project VBA解析バイブル

スポンサーリンク

マイルストーンは「聖域」である:依存関係を可視化し、遅延を即座に検知するVBA設計論

多くの現場で、WBS(Work Breakdown Structure)は「作成した時点で死んでいる」ことが多い。なぜなら、マイルストーン(主要イベント)とそれを取り巻くタスクの依存関係が、単なる静的なExcelシートで管理されているからだ。

真の業務自動化エンジニアにとって、マイルストーンはプロジェクトの心臓部だ。これが止まれば全てが止まる。今日は、Excel上のタスク群から依存関係を動的に解析し、マイルストーンに影響を及ぼす遅延を「自動検知」する堅牢なVBA設計について語る。

1. なぜ「力技のIF関数」では破綻するのか

多くの担当者は、セルに複雑なIF関数や条件付き書式を詰め込んで管理しようとする。だが、プロジェクトの規模が拡大すれば、そのシートは数万行の再計算で重くなり、メンテナンス不能な「スパゲッティ・スプレッドシート」へと化す。

極限のアーキテクトが推奨する設計指針:

  • 計算ロジックの分離: 計算式はセルに置かず、VBAのメモリ上に乗せる。
  • 依存グラフの構築: タスクを「ノード」、依存関係を「エッジ」として扱い、辞書オブジェクト(`Scripting.Dictionary`)でマッピングする。
  • 単一責務の原則: 表示(UI)と演算(ロジック)を完全に分離する。

2. 依存関係自動追跡エンジンの設計

今回は、タスクIDと先行タスクID(Predecessors)をキーにして、マイルストーンに至るまでの「クリティカルパス」を監視するエンジンを構築する。

プロダクションコード:マイルストーン監視エンジン

このコードは、シート上のタスク一覧を走査し、依存関係を解析して遅延タスクを抽出する。

Option Explicit

‘ 依存関係を保持する辞書
Private dictTasks As Object

Public Sub AuditMilestones()
‘ パフォーマンス向上のための定石
Application.ScreenUpdating = False

Set dictTasks = CreateObject(“Scripting.Dictionary”)

‘ 1. データ取り込み(タスクIDをキーに、終了予定日とステータスを格納)
LoadTaskData Sheets(“WBS_Sheet”)

‘ 2. マイルストーンへの依存関係をチェック
Dim key As Variant
For Each key In dictTasks.Keys
If IsDelayed(key) Then
‘ ここでアラート処理(色付けやメール通知)
HighlightDelay key
End If
Next key

Application.ScreenUpdating = True
MsgBox “監視完了:遅延リスクのあるタスクを特定しました。”
End Sub

Private Sub LoadTaskData(ws As Worksheet)
Dim lastRow As Long, i As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
‘ ID, 終了予定日, 先行タスク, ステータスをオブジェクト化して保持
‘ ここでは簡略化のため配列で保持するが、実務ではクラス化を推奨
dictTasks(ws.Cells(i, 1).Value) = Array(ws.Cells(i, 2).Value, ws.Cells(i, 3).Value, ws.Cells(i, 4).Value)
Next i
End Sub

Private Function IsDelayed(taskId As Variant) As Boolean
‘ 再帰的に先行タスクを遡り、過去日付かつ未完了ならTrueを返す
Dim taskData As Variant: taskData = dictTasks(taskId)

‘ 終了予定日 < 今日 かつ 未完了なら遅延とみなす If taskData(0) < Date And taskData(2) <> “完了” Then
IsDelayed = True
End If
End Function

Private Sub HighlightDelay(taskId As Variant)
‘ 対象行を赤色に塗りつぶす等の視覚的アラート
‘ … 実際のUI制御ロジック
End Sub

3. 保守性を高めるための「鉄則」

このコードを現場で運用する際、以下の3点を必ず遵守してほしい。

1. データ整合性の強制: `Data Validation(入力規則)`を使い、タスクIDに重複がないよう制御すること。VBAが動く前の「入力段階」でミスを防ぐのが、真のエンジニアだ。
2. イベント駆動の活用: ボタンを押す運用から脱却し、`Worksheet_Change` イベントを用いて、値が変更された瞬間に該当する依存タスクを再評価する仕組みにする。これにより「常に最新の状況」を可視化できる。
3. エラーハンドリングの徹底: マイルストーンが循環参照(AがBに依存し、BがAに依存するなど)を起こした際、VBAが無限ループに陥らないよう、深さ制限(Recursion Limit)を設けた再帰アルゴリズムを実装すること。

最後に:自動化とは「思考の解放」である

今回紹介した設計の目的は、単に「遅延を検知すること」ではない。「どのタスクがマイルストーンという聖域を汚しているのか」という情報を、人間が脳を使わずに把握できる状態を作ることだ。

管理コストを下げ、本来あなたが注力すべき「プロジェクトの価値創造」に時間を割いてほしい。ツールは作って終わりではない。運用される中で育て、現場の歪みを吸収し続けるものだ。

君のプロジェクトが、この自動化ツールによって盤石なものになることを期待している。健闘を祈る。

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