Project VBAの深淵へ:リソース割り当てをJSONで解き放ち、ダッシュボードと同期せよ
こんにちは。現場の最前線でコードと格闘し続けている皆さんに、今日は少しだけ「一段上の景色」をお見せしましょう。
Microsoft Project(MSP)は強力なツールですが、デスクトップの中に閉じ込めておくにはあまりに惜しい。今回は、プロジェクトの生命線である「リソース割り当て」をJSON形式で抽出・エクスポートし、Webダッシュボードで可視化するための極意を伝授します。
マクロの記録で生成される「自動生成コードの墓場」から脱出し、真の自動化エンジニアへの第一歩を踏み出しましょう。
—
1. なぜ「JSON化」が重要なのか?
Projectのデータは、いわば「生きた複雑なグラフ構造」です。タスクがあり、リソースがあり、それらを繋ぐ「割り当て(Assignment)」がある。
これをWebダッシュボードへ持っていく際、Excel形式を経由してCSVで出力するのはもう古い。JSON(JavaScript Object Notation)こそが、現代のWeb技術との共通言語です。リソースの稼働率やコストをWebブラウザ上で軽快に描画するためには、このデータ構造への変換が必須となります。
—
2. 構造を理解する:Project VBAの階層世界
VBAでProjectを扱う際、頭に入れておくべきは「オブジェクトの親子関係」です。
- Project(プロジェクト全体)
- Task(タスク)
- Assignment(割り当て:タスクとリソースを結ぶ絆)
- Resource(誰が、どれだけ)
この「Assignment(割り当て)」こそが今回の主役です。どのタスクに、誰が、何%割り当てられているか。このデータを横断的に取得するのが、コードの核心となります。
—
3. 実践:リソース割り当てをJSONで書き出す
では、実際にProject VBAを使って、割り当て情報をJSONファイルとして出力するコードを見てみましょう。
‘ プロジェクトのリソース割り当てをJSON形式で書き出すエンジニアリング・スクリプト
Public Sub ExportAssignmentsToJson()
Dim proj As Project
Dim tsk As Task
Dim asn As Assignment
Dim jsonOutput As String
Dim fso As Object
Dim fileStream As Object
Set proj = ActiveProject
jsonOutput = “[” & vbCrLf
‘ 1. タスクをループし、その中の割り当てを掘り出す
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
For Each asn In tsk.Assignments
‘ JSONの各要素を構築
jsonOutput = jsonOutput & ” {” & _
“””TaskName””: “”” & tsk.Name & “””, ” & _
“””ResourceName””: “”” & asn.ResourceName & “””, ” & _
“””Units””: ” & asn.Units & “, ” & _
“””Cost””: ” & asn.Cost & _
“},” & vbCrLf
Next asn
End If
Next tsk
‘ 最後のカンマを削除して括弧を閉じる(簡易的な処理)
jsonOutput = Left(jsonOutput, Len(jsonOutput) – 3) & vbCrLf & “]”
‘ 2. ファイルシステムオブジェクトでJSON書き出し
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set fileStream = fso.CreateTextFile(ThisWorkbook.Path & “\project_data.json”, True)
fileStream.Write jsonOutput
fileStream.Close
MsgBox “JSONエクスポート完了!Webダッシュボードの準備は万端です。”
End Sub
このコードの「賢いポイント」
- Objectの保護: `If Not tsk Is Nothing` で、削除されたタスクなどの空オブジェクトによるエラーを未然に防いでいます。これは実務では必須の「守り」の技術です。
- 柔軟性: `asn.Units` や `asn.Cost` を直接抽出しているため、Web側でグラフ化する際のデータ源として即座に使えます。
—
4. 陥りやすい罠と対策
① 「割り当てがないタスク」の無視
マクロを組む際、全てのタスクに割り当てがあると思い込むのは危険です。`For Each asn In tsk.Assignments` を使うことで、割り当てが0件のタスクを自動的にスキップできるため、エラー回避と効率化を両立できます。
② 文字列内の「”」の扱い
JSONはクォーテーションで囲む形式です。タスク名の中に `”` が含まれているとJSONが崩壊します。本格的な運用では、`Replace(text, “”””, “\”””)` のような置換処理を挟むのがプロの仕事です。
—
5. 次のステップへ
このJSONをWebサーバーに上げれば、D3.jsやChart.jsといったライブラリを使って、プロジェクトの「リソースの偏り」をリアルタイムで可視化できます。
「Projectはただの管理ツールだ」と思っている同僚を横目に、あなたはデータドリブンな意思決定を支えるエンジニアとしての一歩を踏み出しました。
最初は難しく感じるかもしれませんが、「Projectのオブジェクト階層をたどる」という感覚さえ掴めば、どんなデータでもあなたの意のままです。さあ、次はどんなデータを抽出して、プロジェクトを可視化しますか?
皆さんの開発が、より洗練されたものになることを心から応援しています。
