【入門編】リソースの「過負荷」をメールで自動通知するVBAアラートシステム – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理を自動化せよ:Project VBAで構築する「リソース過負荷アラート」の極意

こんにちは。現場の最前線でコードを書き続けるアーキテクトです。

多くのプロジェクト管理者が、ExcelやProjectの画面を睨みつけ、「誰かがパンクしていないか」を必死に確認しています。しかし、人間が監視するシステムは必ず見落としを生みます。

今回は、Project VBAの真髄である「オブジェクトモデルの操作」と「外部アプリとの連携」を使い、リソースの稼働率が100%を超えた瞬間にOutlookで警告メールを飛ばす、自動監視システムの作り方を伝授します。

マクロの記録から一歩踏み出し、真の「自動化エンジニア」への扉を開きましょう。

—

1. なぜ「稼働率」を監視するのか?

プロジェクト管理において、リソースは有限の資産です。稼働率が100%を超えている状態は、いわゆる「火を噴いている」状態。これを検知して即座に担当者へアラートを出すことは、プロジェクトの遅延リスクを未然に摘む、最も高尚なエンジニアリングの一つです。

2. 実装の設計図:Project VBAの構成

今回利用する主要なオブジェクトは以下の3つです。

1. `ActiveProject.Resources`: プロジェクト内の全リソースを管理するコレクション。
2. `Resource.Work` / `Resource.PercentAllocation`: 稼働率を算出するための鍵となるプロパティ。
3. `Outlook.Application`: 外部アプリを制御するためのオブジェクト(要参照設定)。

—

3. 実装コード:過負荷検知アラートシステム

以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。

事前準備

VBAエディタの「ツール」→「参照設定」から、「Microsoft Outlook XX.0 Object Library」にチェックを入れてください。これがないとOutlookは動きません。

Sub SendResourceOverloadAlert()
Dim res As Resource
Dim olApp As Object
Dim olMail As Object

‘ Outlookオブジェクトの生成(早期バインディング推奨)
Set olApp = CreateObject(“Outlook.Application”)

‘ 全リソースをループで走査
For Each res In ActiveProject.Resources
‘ 稼働率が100%を超えているかチェック
‘ PercentAllocationは稼働率を数値で保持している
If res.PercentAllocation > 100 Then

‘ アラートメールの作成
Set olMail = olApp.CreateItem(0)
With olMail
.To = “manager@example.com” ‘ 送信先
.Subject = “【警告】リソース過負荷検出: ” & res.Name
.Body = “警告:” & vbCrLf & _
“リソース名: ” & res.Name & vbCrLf & _
“現在の稼働率: ” & res.PercentAllocation & “%” & vbCrLf & _
“至急、タスクの割り当て状況を確認してください。”
.Send ‘ 自動送信(テスト時は .Display に変更すること)
End With

Debug.Print “アラート送信完了: ” & res.Name
End If
Next res

‘ メモリ解放
Set olMail = Nothing
Set olApp = Nothing
End Sub

—

4. コードの解説:ここが「プロの視点」

1. `For Each` ループの重要性

リソースの数が増減しても壊れないコードを書くには `For Each` が最強です。`For i = 1 To 10` のような添字管理はバグの温床です。Project VBAでは「オブジェクトそのもの」を回す癖をつけましょう。

2. オブジェクトのライフサイクル管理

最後に `Set = Nothing` を行っていることに注目してください。VBAはメモリ管理が緩い言語ですが、外部アプリ(Outlook)を操作する際は、必ず明示的に解放する。これが、長時間稼働させてもクラッシュしない堅牢なツールを作る秘訣です。

3. 「マクロの記録」に頼らない理由

Project VBAには「マクロの記録」機能がありません。つまり、最初から自分でオブジェクトを調べる必要があるのです。これが逆に、プロフェッショナルなスキルを磨く最高の環境になっています。

—

5. 初学者が陥りやすいエラーと対策

  • 「オブジェクトが取得できません」
  • 原因:参照設定の忘れ、またはOutlookが起動していない。
  • 対策:`CreateObject` を使えばプロセスを自動生成できますが、やはり参照設定は基本です。
  • 「稼働率が正しく取れない」
  • 原因:リソースの種類が「作業」ではなく「材料」になっている。
  • 対策:`res.Type` プロパティをチェックし、`pjResourceTypeWork` (作業リソース)のみを対象にフィルタリングしましょう。

—

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

このスクリプトは、あなたの代わりに24時間プロジェクトを監視する「監視塔」になります。ここをクリアすれば、次は「特定のタスクが遅延した時にSlackへ通知する」といった応用も容易でしょう。

自動化の本質は、「人間がやらなくていいことは、すべてコードに押し付ける」ことにあります。

あなたが空いた時間で、よりクリエイティブな「プロジェクトの進め方」を考える時間を作れること。それこそが、このコードの真の価値です。さあ、次はどんな面倒な作業をコードに置き換えましょうか?

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