Project VBAを掌握せよ:Excel名簿からリソースを一括自動登録する「極意」
こんにちは。現場で泥臭く、しかし誰よりもスマートに自動化を追求しているエンジニアです。
Excelで管理された社員名簿を、わざわざMicrosoft Projectに一つずつ手入力していませんか?それは、伝説的な非効率の極みです。Project VBAをマスターすれば、その苦行は数秒で終わります。
今日は、ExcelからProjectのリソースを自動生成し、標準レートやカレンダーまでを一撃で適用する「実戦的VBAツール」の構築手法を伝授します。マクロの記録から卒業し、エンジニアとしての第一歩を踏み出しましょう。
—
1. Project VBAの「地図」を頭に入れよう
Project VBAを扱う上で、まず理解すべきはオブジェクトモデルの階層です。
Excel VBAとの最大の違いは、「プロジェクトファイル(`MSProject.Application`)」という巨大な器の中に、さらに「リソース(`Resources`)」という部品が格納されている点です。
- Application: プロジェクト全体を司る神
- ActiveProject: 今開いている現場
- Resources: リソースの集合体。ここに新人を送り込む
- Resource: 個々の人間や機材。名前、単価、カレンダーを持つ
2. 実践コード:Excelからリソースを爆速生成する
このコードは、Excelのシート(A列:名前、B列:標準レート)を読み取り、開いているProjectファイルにリソースを生成します。
‘ 必要な参照設定: Microsoft Project 16.0 Object Library
Sub ImportResourcesToProject()
Dim projApp As Object
Dim projDoc As Object
Dim ws As Worksheet
Dim lastRow As Long, i As Long
‘ プロジェクトアプリを起動(既に開いていればそれを掴む)
On Error Resume Next
Set projApp = GetObject(, “MSProject.Application”)
If projApp Is Nothing Then
MsgBox “Projectファイルを開いてから実行してください。”
Exit Sub
End If
On Error GoTo 0
Set projDoc = projApp.ActiveProject
Set ws = ThisWorkbook.Sheets(“社員名簿”)
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
‘ リソース登録開始
For i = 2 To lastRow
Dim resName As String
Dim stdRate As Double
resName = ws.Cells(i, 1).Value
stdRate = ws.Cells(i, 2).Value
‘ リソースを追加
Dim newRes As Object
Set newRes = projDoc.Resources.Add(resName)
‘ プロパティをセット
newRes.StandardRate = stdRate & “/h” ‘ 時間単価の設定
newRes.Type = pjResourceTypeWork ‘ 作業リソースとして登録
‘ ログ出力(イミディエイトウィンドウで確認)
Debug.Print “登録完了: ” & resName
Next i
MsgBox “リソースの登録が完了しました!”
End Sub
3. 陥りやすい「3つの落とし穴」
初学者が必ずと言っていいほどハマる罠があります。ここをクリアすれば、あなたはもう中級者です。
① 「参照設定」という名の儀式
Project VBAをExcelから操作するには、VBAエディタのメニュー「ツール」→「参照設定」から『Microsoft Project 16.0 Object Library』にチェックを入れる必要があります。これをしないと`pjResourceTypeWork`のような定数が認識されず、コードが動きません。
② リソースの重複登録
同じ名前を二度追加するとエラーになります。実務では `If` 文で既存リソースをチェックし、存在しない場合のみ `Add` するロジックを入れるのが定石です。
③ 通貨単位の罠
`StandardRate` に数値を代入する際、`”1000/h”` のように単位を含めた文字列で渡すのが安全です。Project側の通貨設定(日本円なら「¥」)に依存するため、数値だけだと意図しないレートになることがあります。
—
4. エンジニアとしての一歩先へ:カレンダー調整のヒント
リソースを登録しただけでは不十分なケースがほとんどです。実務では「この人は週3日勤務だ」といったカレンダー設定が必要になります。
Project VBAでは `newRes.Calendar` オブジェクトを操作することで、個別の稼働日を制御できます。まずは上記コードで「リソースを並べる」ことをクリアしてください。それができれば、次は「特定のリソースにカスタムカレンダーを適用する」というステップへ進めます。
最後に:自動化は「愛」である
ExcelからProjectへデータを流し込む作業は、一見地味です。しかし、その作業によってチームメンバーが正確なコスト管理と計画立案に集中できる環境を作れるとしたら……それは立派な「エンジニアリング」です。
まずはこのコードをコピペして、自分のPCで動かしてみてください。画面の中でリソースが次々と生成される様子を見たとき、きっと「もっと何かできるはずだ」というワクワクが湧き上がるはずです。
何か詰まったら、いつでも聞いてください。壁を越えるまでサポートしますよ!
