【入門編】リソースの「稼働状況」をCSV出力し、BIツールで可視化するためのデータ整形VBA – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵へ:リソース稼働状況を「データパイプライン」として抽出する技術

こんにちは。現場で泥臭く、しかし誰よりもエレガントに自動化を追求するエンジニアです。

皆さんはMicrosoft Project(MSP)のデータをどう扱っていますか?「プロジェクトの画面で見るだけで精一杯」「レポート機能が使いにくい」と嘆いていませんか?

MSPの真価は、その内部に眠る「リソースの時系列データ」をいかに取り出し、Power BIやTableauといったBIツールで調理するかにあります。今回は、初心者の方が「マクロの記録」から一歩進み、「実務で使えるデータパイプライン」を構築するためのVBA作法を伝授します。

—

1. なぜ「稼働状況」のデータ化が重要なのか

MSPの標準レポートは「今、ここ」を見るには良いですが、経営層が見たい「数ヶ月先までのリソースの過不足」や「部門横断的な負荷」を分析するには力不足です。

ここで重要なのは、「人間が見やすい表」ではなく「プログラムが処理しやすい表(フラットデータ)」に整形して書き出すことです。

目指すべきデータの姿(Tidy Data)

| 日付 | リソース名 | 割り当て時間 | プロジェクト名 |
| :— | :— | :— | :— |
| 2023/11/01 | 山田太郎 | 8h | A案件 |
| 2023/11/01 | 佐藤花子 | 4h | B案件 |

このように、1行に1つの事実がある形に落とし込むのが、データ分析の鉄則です。

—

2. 現場で使えるVBAコード:リソース稼働抽出の極意

以下のコードは、アクティブなプロジェクトから「リソース名」「開始日」「終了日」「作業時間」をCSVとして書き出すためのエンジンです。

Sub ExportResourceUtilizationToCSV()
‘ 変数の宣言:メモリ効率を意識して型を明示する
Dim proj As Project
Dim res As Resource
Dim asgn As Assignment
Dim filePath As String
Dim fileNum As Integer

Set proj = ActiveProject
filePath = ThisWorkbook.Path & “\Resource_Utilization.csv”
fileNum = FreeFile

‘ CSVファイルを書き込みモードで開く
Open filePath For Output As #fileNum

‘ ヘッダーを書き込む
Print #fileNum, “ResourceName,TaskName,Start,Finish,Work”

‘ プロジェクト内の全リソースを走査
For Each res In proj.Resources
‘ リソースが割り当てられているか確認
If Not res Is Nothing Then
‘ 各リソースに紐づくタスク(Assignment)をループ
For Each asgn In res.Assignments
‘ データの書き出し(カンマ区切り)
Print #fileNum, res.Name & “,” & _
asgn.Task.Name & “,” & _
asgn.Start & “,” & _
asgn.Finish & “,” & _
(asgn.Work / 60) ‘ 分単位を時間に換算
Next asgn
End If
Next res

Close #fileNum
MsgBox “抽出完了!BIツールで読み込んでください。”, vbInformation
End Sub

—

3. コードが語る「3つの重要ポイント」

① オブジェクトの階層構造(Project > Resource > Assignment)

MSPのVBAは、この階層構造を理解することがすべてです。
「プロジェクトの中にリソースがいて、リソースの中に割り当て(Assignment)がある」。この入れ子構造(ネスト)をループで回すという感覚が身につけば、どんな複雑なデータも抽出できます。

② `FreeFile` を使う理由

初心者の方はファイル番号に直接 `1` などと書きがちですが、それは危険です。他のプログラムがその番号を使っているとエラーになります。`FreeFile` はシステムから空いている番号を取得する「安全装置」です。プロのコードには必ずこれが入っています。

③ 単位の換算(Work / 60)

MSP内部では作業時間は「分」で保持されています。BIツールで可視化する際は「時間(h)」に直しておかないと、後で計算ミスのもとになります。こうした「データの前処理」をVBAで行うのが自動化の極意です。

—

4. 陥りやすいエラーと対策

  • 「オブジェクトが必要です」エラー
  • 原因: 割り当てがないリソース(空のリソース)を無理やり参照しようとしています。
  • 対策: `If Not res Is Nothing Then` のようなチェックを必ず入れること。
  • 「許可がありません」エラー
  • 原因: 前回のCSVを開いたまま実行しようとしています。
  • 対策: 処理の冒頭でファイルを閉じる記述を追加するか、ファイル名にタイムスタンプを付与して重複を防ぎましょう。

—

最後に:ここをクリアすれば、あなたはもう「自動化の入り口」に立っています

VBAを書くことは、単に作業を速くするだけではありません。「プロジェクトの仕組みをコードという言語で解釈する」という、エンジニアとしての視点を手に入れることです。

まずはこのコードをコピーして、動かしてみてください。CSVが出力された瞬間に、あなたのPCはただの「入力機」から「データ分析のハブ」へと進化します。

何か分からないことがあれば、いつでも聞いてください。ここをクリアすれば、Project VBAの基本はバッチリですよ。次の一歩として、次は「特定期間の稼働率」を計算するロジックに挑戦してみましょう。応援しています!

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