【入門編】リソースの「稼働率」をヒートマップ化するExcelアドイン連携VBA – Project VBA解析バイブル

スポンサーリンク

Project VBAを極める:リソース稼働率を「ヒートマップ」で可視化する超速ダッシュボード術

こんにちは。Project VBAの世界へようこそ。
「マクロの記録」から一歩踏み出し、Projectの深淵に触れようとしているあなたに、今日はリソースの稼働率をヒートマップで可視化するという、現場で最も重宝されるスキルを伝授します。

多くの人がProjectの標準機能である「リソースグラフ」に頼りがちですが、あれでは細かい調整や独自の分析ができません。VBAでデータを吸い上げ、Excelの「条件付き書式」という最強の武器に流し込む。この連携こそが、プロの自動化エンジニアの戦い方です。

—

1. なぜ「配列」で抽出するのか?

Projectのデータを一つずつ`Task.Assignments`でループさせていては、巨大なプロジェクトでは処理が終わる頃にはコーヒーが冷めてしまいます。

極意: Projectのデータは、一度メモリ上の「配列」にぶち込むこと。
`Application.ActiveProject.Tasks`を直接叩くのではなく、必要な属性(リソース名、開始日、終了日、稼働率)だけをVariant型配列に格納する。これが処理速度を100倍にする秘訣です。

—

2. 実践コード:リソース稼働データをExcelへ転送する

このコードは、Project側で動かします。Excelをバックグラウンドで起動し、そこにデータを書き出します。

Sub ExportResourceUtilization()
Dim proj As Project
Dim tsk As Task
Dim assn As Assignment
Dim xlApp As Object, xlWb As Object, xlWs As Object

Set proj = ActiveProject
‘ Excelを起動(既存のインスタンスがあれば取得)
Set xlApp = CreateObject(“Excel.Application”)
Set xlWb = xlApp.Workbooks.Add
Set xlWs = xlWb.Sheets(1)

‘ ヘッダーの設定
xlWs.Range(“A1:C1”).Value = Array(“リソース名”, “日付”, “稼働率(%)”)

Dim rowIdx As Long: rowIdx = 2

‘ 速度向上のため、画面更新を停止
Application.ScreenUpdating = False

‘ 割り当てデータの抽出(ここが心臓部)
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
For Each assn In tsk.Assignments
‘ 稼働率が0%ではないものだけを抽出
If assn.Units > 0 Then
xlWs.Cells(rowIdx, 1).Value = assn.ResourceName
xlWs.Cells(rowIdx, 2).Value = assn.Start
xlWs.Cells(rowIdx, 3).Value = assn.Units 100
rowIdx = rowIdx + 1
End If
Next assn
End If
Next tsk

Application.ScreenUpdating = True
xlApp.Visible = True ‘ 結果を確認するために表示
MsgBox “データの抽出が完了しました。Excelの条件付き書式でヒートマップを作成してください。”
End Sub

—

3. Excel側で「ヒートマップ」を完成させる

データがExcelに書き出されたら、あとは簡単です。

1. ピボットテーブルを作成:

  • 行:リソース名、列:日付、値:稼働率の合計

2. 条件付き書式を適用:

  • ピボットテーブルのデータ範囲を選択。
  • 「ホーム」タブ > 「条件付き書式」 > 「カラースケール」。
  • 「高負荷(赤)」から「低負荷(緑)」になるように設定します。

これで、どのリソースがどの時期にパンクしているのか、一目でわかるダッシュボードの完成です。

—

4. 陥りやすい罠:ここをクリアすれば「脱・初心者」

VBAを触り始めると、必ず以下のエラーに遭遇します。

  • 「オブジェクト変数または With ブロック変数が設定されていません」:

これは、`For Each tsk In proj.Tasks`で、削除されたタスク(Nothing)にアクセスしようとした時に起こります。必ず`If Not tsk Is Nothing Then`という盾を置く癖をつけてください。

  • 「メモリ不足」:

巨大なプロジェクトでExcelを何度も開閉するとメモリリークの原因になります。`Set xlApp = Nothing`で確実に解放する。これがプロの流儀です。

—

先輩エンジニアからのメッセージ

Project VBAは、単なる「自動入力ツール」ではありません。「プロジェクトの健康状態を可視化する眼」です。

今回紹介した「稼働率のヒートマップ」ができれば、あなたは「作業者」から「プロジェクトの意思決定を支援するエンジニア」に昇格したと言えます。
まずはこのコードをコピーして、自分のプロジェクトで動かしてみてください。うまく動かない箇所があれば、またいつでも聞いてください。ここを突破した先に、全く新しい景色が見えてきますよ。

さあ、コードを書いて、プロジェクトの未来を可視化しましょう!

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