【入門編】リソースの「標準単価」をインフレ率等に基づいて一括補正するシミュレーションツール – Project VBA解析バイブル

スポンサーリンク

こんにちは!プロジェクト管理の現場で、日々数えきれないタスクやリソースの調整に奔走していませんか?

「来期からインフレやベースアップに伴い、全リソースの単価(Standard Rate)を3.5%一括で引き上げて予算シミュレーションを出してほしい」
そんな急な経営陣からのオーダーに直面したとき、Microsoft Projectの画面を開いて、一人ひとりのリソースのプロパティをポチポチと開き、単価を電卓で計算しながら書き換えていく……そんな気の遠くなる作業を想像していませんでしょうか。

もしプロジェクトに100人、200人のリソースが登録されていたら、それだけで半日仕事になってしまいますし、何よりヒューマンエラーの元です。

今回は、そんな地道な手作業を秒速で終わらせ、あなたの評価を爆上げするための「リソース標準単価の一括インフレ補正シミュレーションツール」をProject VBAで構築する方法を解説します。

ここをクリアすれば、Project VBAの基本と「リソースオブジェクトの扱い方」はバッチリです。優しく、そして本質的なアプローチで紐解いていきましょう。

—

1. なぜ「マクロの記録」では通用しないのか?

Excel VBAであれば「マクロの記録」ボタンを押してセルの値を書き換えればコードが生成されますが、Microsoft Projectの世界では、「リソースの単価変更」のような複雑なオブジェクト操作はマクロの記録がほとんど役に立ちません。

Project VBAをマスターするための第一歩は、「プロジェクト全体の構造(オブジェクト階層)を理解すること」です。

リソースを支配する「ActiveProject.Resources」の世界

Projectファイルの中には、タスクがあり、リソースがあり、割り当てがあります。
今回私たちが操作するのは、プロジェクト全体に登録されているリソースの集合体、すなわち `ActiveProject.Resources` です。

この集合体(コレクション)の中から、一人ひとりのリソース(`Resource` オブジェクト)を取り出し、その「標準単価(`StandardRate`)」のプロパティを書き換えていく、というのが今回のシミュレーションの全貌です。

—

2. 現場で即戦力になるシミュレーション・マクロの全体像

それでは早速、実際のコードを見てみましょう。
以下のコードをProjectのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてください。

このコードは、単に単価を書き換えるだけでなく、「元の単価を保持したまま、指定したインフレ率(%)で何%アップさせるかをシミュレーションできる」という実務に耐えうる設計にしています。

Sub SimulateResourceRateInflation()
‘ =====================================================================
‘ テーマ: リソース標準単価の一括インフレ補正シミュレーション
‘ 概要: 登録されている全リソースの標準単価を指定した割合で一括変更します。
‘ =====================================================================

Dim irt As Resource
Dim inflationRate As Double
Dim msg As String
Dim confirm As VbMsgBoxResult

On Error GoTo ErrorHandler

‘ 1. ユーザーからインフレ率(引き上げ率)を入力してもらう(例: 3.5%なら 3.5 と入力)
msg = “リソースの標準単価を一括シミュレーションします。” & vbCrLf & _
“引き上げ率(%)を入力してください。(例: 3.5)” & vbCrLf & _
“※マイナスを入力すると引き下げになります。”

Dim inputVal As String
inputVal = InputBox(msg, “単価インフレ率シミュレーション”, “3.0”)

‘ キャンセルされた場合は処理を抜ける
If inputVal = “” Then Exit Sub

‘ 入力値が数値かどうかの簡易チェック
If Not IsNumeric(inputVal) Then
MsgBox “有効な数値を入力してください。”, vbCritical, “入力エラー”
Exit Sub
End If

inflationRate = CDbl(inputVal) / 100

‘ 2. 実行確認のダイアログを表示
confirm = MsgBox(“全リソースの標準単価を ” & inputVal & ” % 変更します。” & vbCrLf & _
“本当によろしいですか?”, vbYesNo + vbQuestion, “実行確認”)

If confirm = vbNo Then
MsgBox “処理を中止しました。”, vbInformation, “中止”
Exit Sub
End If

‘ 3. リソースのループ処理(ここがProject VBAの核心です)
Dim updateCount As Long
updateCount = 0

For Each irt In ActiveProject.Resources
‘ リソースが存在し、かつ「コスト」リソース等ではなく、有効な人物・材料リソースであるかを判定
‘ (Namedリソース、つまり名前が空白でないものを対象にする)
If Not irt Is Nothing Then
If irt.Name <> “” Then
‘ 現在の標準単価にインフレ率を掛け合わせて再設定
‘ StandardRateは内部的に通貨の最小単位(通常は円やドル)で保持されています
Dim currentRate As Double
currentRate = irt.StandardRate

‘ 新しい単価を計算(四捨五入などの調整はお好みで)
Dim newRate As Double
newRate = currentRate (1 + inflationRate)

‘ 代入
irt.StandardRate = newRate
updateCount = updateCount + 1
End If
End If
Next irt

‘ 4. 完了報告
MsgBox “シミュレーション完了!” & vbCrLf & _
updateCount & ” 件のリソース単価を更新しました。”, vbInformation, “成功”

Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “システムエラー”
End Sub

—

3. コードのキモを噛み砕いて解説!

ここをクリアすればProject VBAの基本はバッチリ、と言えるポイントを3つに絞って解説します。

① `For Each … In ActiveProject.Resources` の魔力

Excelの `ActiveSheet.Cells` と同じ感覚で、Projectでは `ActiveProject.Resources` を使います。
このループを回すことで、プロジェクトに登録されている外部リソース、社内リソースの区別なく、すべてのリソースオブジェクトにアクセスできます。

② `irt.Name “” ` という安全弁の重要性

Microsoft Projectのリソースシートを開くとわかりますが、人間が入力していない「空行」が裏で存在することがあります。
この空行(名前に何も入っていない状態)に対してプロパティをいじろうとすると、思わぬランタイムエラーやゴミデータの生成につながります。
「名前が空白ではないものだけを処理する」というガード条件を入れるのが、プロのエンジニアの作法です。

③ `StandardRate` プロパティの正体

Project VBAにおいて、単価は `Currency` 型や `Double` 型として扱われます。
コード内では `irt.StandardRate = newRate` と非常にシンプルに代入していますが、裏側ではProjectの強力なコストエンジンが働き、この単価変更に連動して「稼働率(Cost)」や「タスク全体のコスト(Cost)」の再計算が自動で行われます。
Excelのように数式をいちいち張り替える必要がないのは、Project VBAの最大の強みです。

—

4. 陥りがちな罠とエラー回避の知見

実務でこのツールを運用する際、以下の罠にハマることがよくあります。事前に回避策を知っておきましょう。

  • 罠1: 通貨単位(円/ドルなど)の単位ズレ
  • `StandardRate` は、プロジェクト自体の通貨設定(時間給、日給など)に依存します。例えば「時給」で設定されているリソースに対して計算が行われるため、もし「日給(Day)」や「週給(Week)」で登録されている特殊な単価体系がある場合は、意図しない跳ね上がり方をするリスクがあります。
  • 対策: 事前にリソースビューで「単価の単位(Rate Table / 標準単価の単位)」が時間ベース(Hour)に統一されているか確認するか、コード内で `irt.StandardRate` の単位系をチェックする分岐を入れると完璧です。
  • 罠2: Undo(元に戻す)が効かない恐怖
  • VBAから実行された一括変更は、ExcelやProjectの「Ctrl + Z(元に戻す)」の履歴にスタックされない(あるいは一括で消去される)ケースがあります。
  • 対策: 実行する前に、必ず「プロジェクトファイルのバックアップ(別名保存)」を取ることを社内運用ルールとして徹底させてください。シミュレーションツールだからこそ、元に戻せなくなったときの保険が不可欠です。

—

まとめ:業務自動化の第一歩を踏み出そう

今回は、リソースの標準単価を一括でインフレ補正するシミュレーションツールを通じて、Project VBAのオブジェクト操作の基本を解説しました。

「手作業で数時間かかっていた予算シミュレーションが、たった3秒で終わる」

この感動を味わうと、VBAは単なる面倒なプログラミング言語ではなく、あなたのプロジェクトマネジメントを強力に守ってくれる最強の相棒に変わります。

ぜひ今回のコードを現場のプロジェクトに組み込んで、スマートで知的なリソース管理を実現してください。あなたのエンジニアライフが、よりクリエイティブなものになることを応援しています!

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