【入門編】リソースの「単価」をプロジェクトの「年度」ごとに自動切り替えするマクロ – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「単価」を年度ごとに自動制御する ― Project VBAで描く効率化の極意

こんにちは。現場で泥臭い自動化と格闘し、システムの中身を解剖し続けてきたエンジニアです。

皆さんは、Microsoft Project(MSP)の「リソース単価」管理で頭を抱えたことはありませんか?「来年度から単価が変わるのに、過去の工数計算までズレてしまった」「年度ごとに手動で単価を書き換えるのが面倒すぎる」…。

今日は、そんな皆さんの悩みを一掃する「年度別・単価自動適用ロジック」を伝授します。マクロの記録から卒業し、MSPの深淵を覗いてみましょう。

—

1. なぜ「年度」で単価を切り替える必要があるのか?

MSPの標準機能でも「単価表」は使えますが、大規模プロジェクトや複数年度にまたがる契約では、「日付を意識した動的な単価管理」が不可欠です。

手動で変えると、過去の実績値まで再計算されてしまい、経営層への報告が狂うという事故が多発します。だからこそ、VBAで「現在の日付」を判定し、その時期に応じた単価をピンポイントで適用するロジックが必要なのです。

—

2. 核心:年度別単価適用ロジックの実装

まずは、以下のコードを見てください。これが現場で最も安定して動く「単価自動切り替え」のテンプレートです。

Sub UpdateResourceRateByYear()
Dim res As Resource
Dim currentYear As Integer
Dim newRate As Currency

‘ プロジェクト内の全リソースを走査
For Each res In ActiveProject.Resources
‘ リソースが空でないか確認(意外と重要)
If Not res Is Nothing Then

‘ 現在の年度を取得(例: 2024年度なら4月以降)
If Month(Date) >= 4 Then
currentYear = Year(Date)
Else
currentYear = Year(Date) – 1
End If

‘ 年度に基づいた単価の判定ロジック
Select Case currentYear
Case 2023
newRate = 5000 ‘ 2023年度単価
Case 2024
newRate = 5500 ‘ 2024年度単価
Case Else
newRate = 6000 ‘ それ以降の予備単価
End Select

‘ リソースの標準単価(StandardRate)を更新
res.StandardRate = newRate

Debug.Print res.Name & ” の単価を ” & newRate & ” に更新しました。”
End If
Next res

MsgBox “全リソースの単価更新が完了しました!”, vbInformation
End Sub

コードのポイント解説

  • `For Each res In ActiveProject.Resources`: プロジェクト内の全リソースを一つずつ取り出すループです。これがVBAの基本にして最強の制御構造です。
  • `Month(Date)`: 現在のシステム時刻から月を取り出します。4月を年度の区切りとする日本企業では必須のテクニックです。
  • `Currency型`: 単価のような「金銭」を扱う変数は、小数点誤差が出にくい`Currency`型を使うのがプロの鉄則です。`Double`は避けましょう。

—

3. 初学者が陥りやすい「3つの罠」

VBAを触り始めた人が必ずぶつかる壁がこれです。覚えておいてください。

1. 「Nothing」の壁:
`ActiveProject.Resources`には、削除されたリソースの跡地が残っている場合があります。`If Not res Is Nothing`というチェックを怠ると、いきなりエラーで止まります。
2. 型変換の罠:
単価に「円/時」以外の文字列が含まれていると、計算が止まります。入力チェックを入れるか、データ整合性を保つのが大前提です。
3. 再計算のオーバーヘッド:
プロジェクトの規模が大きい場合、単価を更新するたびにMSPが全体を再計算しようとします。もし数千行のリソースがあるなら、`Application.Calculation = pjManual`で計算を一時停止させ、最後に自動計算に戻すのが「伝説級」の配慮です。

—

4. 現場での運用ステップ

1. VBEを開く: `Alt + F11` を押します。
2. 標準モジュールを挿入: 「挿入」→「標準モジュール」を選択。
3. コードを貼り付け: 上記コードを貼り付け、単価の数値を自社の規定に合わせて書き換えてください。
4. テスト実行: まずはコピーを取ったファイルで実行しましょう。いきなり本番データでやるのは勇気ではなく無謀です。

—

最後に:自動化は「未来への投資」

このマクロを使えば、年度替わりの忙しい時期に、数時間かけて手動でデータを修正する作業はゼロになります。浮いた時間で、皆さんは「プロジェクトの品質」や「チームのコミュニケーション」といった、人間にしかできない価値ある仕事に注力してください。

VBAは単なる道具です。でも、その道具を使いこなすことで、あなたのエンジニアとしての立ち位置は確実に変わります。

「ここが動かない!」「もっと複雑な条件分岐にしたい!」という悩みがあれば、いつでも相談してください。その壁を壊すことこそが、自動化エンジニアの醍醐味なのですから。

それでは、良い自動化ライフを!

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