【入門編】リソースの標準単価を年度ごとに一括更新するメンテナンスツール – Project VBA解析バイブル

スポンサーリンク

Project VBAの極意:年度替わりの「リソース単価一括更新」を自動化する

こんにちは。現場で泥臭い自動化を積み重ね、いつしか「Project VBAの深淵」を覗くようになったエンジニアです。

皆さんが普段使っているMicrosoft Project。手動で一人ずつリソース単価を更新していませんか?年度替わりに100人、200人と更新するのは、まさに苦行です。今回は、そんな非効率を打破するための「リソース単価一括更新ツール」の作り方を解説します。

単にコードを渡すだけでなく、なぜそう書くのか、「オブジェクトのライフサイクル」という視点を交えてお話ししましょう。ここをクリアすれば、あなたはもう「マクロの記録」から卒業した、真のプロジェクト自動化エンジニアです。

—

1. なぜ「手動」は危険なのか?

Project VBAにおいて、リソース(Resource)は「Resourceオブジェクト」として管理されています。手動更新の最大の敵は「ヒューマンエラー」と「情報の乖離」です。

Excelやデータベースにある最新の単価表とProjectを同期させる。この「差分を埋める」プロセスを自動化することで、人的ミスをゼロにし、プロジェクトマネージャーは「管理」ではなく「分析」に集中できるようになります。

—

2. リソース単価更新のメカニズム

Projectの単価情報は、単なる数値ではありません。「ResourceRateオブジェクト」という、時系列を管理する階層構造の中に存在します。

  • Resource: 人そのもの
  • ResourceRates: 単価の履歴(過去から未来へ)
  • ResourceRate: 特定期間の単価

今回のアプローチは、「外部(Excelなど)からデータを読み込み、該当するリソースのResourceRateを更新する」という流れになります。

—

3. 実践:リソース単価一括更新スクリプト

以下に、実戦でそのまま使えるコードを用意しました。まずは標準モジュールに貼り付けてみてください。

Sub BulkUpdateResourceRates()
‘ プロジェクトオブジェクトの参照(高速化の第一歩)
Dim proj As Project
Set proj = ActiveProject

Dim res As Resource
Dim newRate As Double
Dim effectiveDate As Date

‘ 更新する年度の開始日を設定
effectiveDate = DateValue(“2024/04/01″)

‘ エラーハンドリングは自動化の命
On Error GoTo ErrorHandler

‘ 全リソースをループ処理
For Each res In proj.Resources
‘ リソースがNULLでないか確認(意外と重要)
If Not res Is Nothing Then
‘ ここでは例として、リソース名に紐づいた計算を行っていると想定
‘ 本来はここで外部DB/Excelから値を引いてくる
newRate = GetRateFromExternalSource(res.Name)

If newRate > 0 Then
‘ 単価を更新する(ResourceRatesコレクションへの追加)
res.ResourceRates.Add effectiveDate, newRate
Debug.Print res.Name & ” の単価を ” & newRate & ” に更新しました。”
End If
End If
Next res

MsgBox “更新完了!”, vbInformation
Exit Sub

ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub

‘ 外部データを模した関数
Function GetRateFromExternalSource(resourceName As String) As Double
‘ 本来はここに ADODB 等を使って DB に接続するコードが入ります
‘ 今回はテスト用にダミー値を返します
GetRateFromExternalSource = 5000 ‘ 5000円/時
End Function

—

4. 陥りやすい罠と解決策

初学者が必ず突き当たる壁がいくつかあります。ここを理解すれば、あなたのレベルは一段階上がります。

① オブジェクトの解放(メモリ管理)

`Set proj = Nothing` を書く癖をつけましょう。VBAはメモリ管理が甘い言語です。大規模プロジェクトを扱う際、オブジェクトを参照し続けるとメモリリークの原因になります。

② 日付のフォーマット

`effectiveDate` は必ず `Date` 型で定義してください。文字列(String)で渡すと、PCの環境設定によって「2024/04/01」が読み込めず、エラーで止まります。

③ ResourceRateは「追加」である

注意してください。`ResourceRates.Add` は、既存の単価を上書きするのではなく、履歴として追加されます。もし「上書き」したい場合は、一度既存のRateを削除する処理が必要になります。

—

5. 最後に:エンジニアとしてのマインドセット

自動化ツールの価値は、コードの長さではありません。「誰が使っても同じ結果が再現されること」にあります。

今回作成したツールをベースに、次は「外部Excelファイルを読み込む機能」を組み込んでみてください。これができれば、あなたはもう単なる「VBAを使える人」ではなく、プロジェクトの運用を最適化する「アーキテクト」の入り口に立っています。

分からないことがあれば、いつでも聞いてください。焦らず、一歩ずつ、自動化の快感を味わっていきましょう。応援しています!

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