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は、単なる「自動入力ツール」ではありません。「プロジェクトの健康状態を可視化する眼」です。
今回紹介した「稼働率のヒートマップ」ができれば、あなたは「作業者」から「プロジェクトの意思決定を支援するエンジニア」に昇格したと言えます。
まずはこのコードをコピーして、自分のプロジェクトで動かしてみてください。うまく動かない箇所があれば、またいつでも聞いてください。ここを突破した先に、全く新しい景色が見えてきますよ。
さあ、コードを書いて、プロジェクトの未来を可視化しましょう!
