【入門編】【上級者向け】タスクの「メモ」フィールドを利用した、依存関係の論理的根拠(理由)の自動監査ログ – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「なぜ」を資産に変える:Project VBAによる依存関係の自動監査ログ実装術

やあ。プロジェクトマネジメントの現場で、こんな経験はないだろうか?

「このタスク、なぜ先行タスクと紐付いているんだ?」
「いつの間にか依存関係が変わっているけど、誰がやったんだ?」

プロジェクトが巨大化するほど、この「なぜ(理由)」の追跡は困難を極める。マクロの記録で自動化する段階は卒業だ。今日は、Project VBAを使いこなし、タスクの依存関係に「論理的な足跡」を刻み込む、ワンランク上のアーキテクチャを伝授しよう。

—

1. なぜ「メモ」フィールドを使うのか?

Project VBAにおいて、タスクは単なるオブジェクトではない。複雑な依存関係を持つ「生きた情報構造体」だ。
標準の「先行タスク」フィールドには、IDしか記録されない。しかし、ビジネスの現場では「なぜその依存関係が必要なのか」というコンテキスト(背景)こそが、プロジェクトのリスク管理の要となる。

今回の戦略はこうだ。
1. VBAでタスクの依存関係を変更する関数を作成する。
2. その際、変更理由を引数として受け取る。
3. 自動的に「メモ(Notes)」フィールドに、[タイムスタンプ][実行者][変更理由]を追記する。

これで、あなたのプロジェクトは「誰が・いつ・なぜ」を説明できる、盤石なデータ構造を手に入れることになる。

—

2. 実装:依存関係設定と自動監査ログの関数

まずは、このコードを見てほしい。これが、現場でそのまま使える「依存関係設定の標準メソッド」だ。

‘ 【上級者向け】依存関係設定と監査ログ自動生成
‘ ターゲットタスクに先行タスクを設定し、メモに理由を追記する
Sub SetDependencyWithAudit(targetTask As Task, predecessorTask As Task, reason As String)
On Error GoTo ErrorHandler

‘ 1. 依存関係の構築 (Predecessorsプロパティへの追加)
‘ 既に先行タスクがある場合はカンマ区切りで追加する
If targetTask.Predecessors <> “” Then
targetTask.Predecessors = targetTask.Predecessors & “,” & predecessorTask.ID
Else
targetTask.Predecessors = CStr(predecessorTask.ID)
End If

‘ 2. 監査ログの生成(メモ欄への追記)
Dim logEntry As String
logEntry = vbCrLf & “— 監査ログ: ” & Now & ” —” & vbCrLf & _
“実行者: ” & Application.UserName & vbCrLf & _
“変更内容: タスクID ” & predecessorTask.ID & ” を先行タスクに設定” & vbCrLf & _
“理由: ” & reason & vbCrLf

targetTask.Notes = targetTask.Notes & logEntry

Exit Sub

ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub

—

3. コードの読み解き:ここを抑えれば「プロ」への道が開ける

① オブジェクト指向の考え方

`targetTask As Task` という書き方に注目してほしい。これはProject VBAにおける「型指定」だ。
初学者は `TaskID` だけでタスクを操作しがちだが、プロはタスクそのものをオブジェクトとして捉える。これにより、`targetTask.Notes` や `targetTask.Predecessors` といったプロパティに直接アクセスでき、コードの可読性と安全性が劇的に向上する。

② `vbCrLf` の重要性

メモフィールドはテキストボックスだ。一行で全てを繋げると後で読む人間が絶望する。`vbCrLf`(Visual Basic Carriage Return Line Feed)を使って、適切な改行を入れることは、コードを書く者の「誠実さ」の表れだ。

③ 陥りやすい罠:エラーハンドリング

「依存関係に循環参照が含まれたらどうなるか?」Projectは自動的にエラーを吐く。`On Error GoTo` を入れずに自動化を走らせるのは、シートベルトなしで高速道路を走るようなものだ。必ず実装すること。

—

4. 次のステージへ:さらに洗練させるには

この仕組みを導入すると、あなたのプロジェクトは「変更履歴を保持するデータベース」へと進化する。さらに突き詰めるなら、以下のアプローチが有効だ。

  • カスタムフィールドの活用: `Notes` は容量に限界がある。大量のログを吐くなら、カスタムフィールド(Text1, Text2…)にログを退避させる設計に切り替えよう。
  • バリデーションの強化: `reason` が空欄の場合はエラーにするなど、強制的に「理由」を書かせる運用にすれば、チーム全体の品質管理レベルが一段階上がるはずだ。

—

最後に:自動化は「対話」である

自動化とは、ただ面倒な作業を消し去ることではない。「プロジェクトの情報を、後から読み解ける資産として整えること」だ。

今回のコードをベースに、自分の現場の運用に合わせてカスタマイズしてみてほしい。最初は難しく感じるかもしれないが、この「オブジェクトを操る感覚」さえ掴めれば、君はもう単なるVBAユーザーではない。プロジェクトの構造を設計するアーキテクトだ。

ここをクリアした君なら、次はもっと複雑なWBSの自動生成や、リソース配分の最適化アルゴリズムも書けるようになるはずだ。応援しているよ。何か詰まったら、いつでも戻っておいで。

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