【入門編】リソースの「コストセンター」をVBAで一括設定し、部門別予算管理を効率化する – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵へ:リソースの「コストセンター」を一括制御し、予算管理をマスターする

こんにちは。現場の最前線でVBAと格闘し続けている皆さんに、今日は少しだけ「深い」話をしましょう。

Project VBA(Microsoft Projectの自動化)は、単なる作業の効率化ツールではありません。プロジェクトという「生き物」のデータを制御し、経営の意思決定を左右する心臓部です。今回は、多くのプロジェクトマネージャーが頭を抱える「リソースのコストセンター管理」を、VBAで一瞬にして終わらせる極意を伝授します。

「マクロの記録」から一歩踏み出し、プロジェクトのコストを自在に操るエンジニアへの第一歩です。

—

1. なぜ「カスタムフィールド」なのか?

Microsoft Projectには、標準で用意されているフィールド(名前や単価など)以外に、「ユーザー設定フィールド」が存在します。

なぜコストセンターをここに流し込むのか? それは、プロジェクトの収支を部門別に見たいという現場の切実なニーズに応えるためです。これを手作業で100人分入力するのは苦行ですよね。VBAを使えば、Excel上のマスターデータから数秒で全リソースに同期させることができます。

—

2. リソース管理の核となる「Resourceオブジェクト」

Project VBAにおけるリソース操作の基本は、`ActiveProject.Resources` コレクションを制御することです。

【今回使用するコード:リソースコストセンター一括設定】

以下のコードは、アクティブなプロジェクト内のリソースを走査し、指定した名前のリソースに対して、コストセンター情報をカスタムフィールド(今回は「テキスト1」を使用)に書き込むものです。

Sub BatchSetCostCenter()
‘ 変数の宣言
Dim res As Resource
Dim costCenter As String

‘ 設定したいコストセンターの定義
costCenter = “開発一部-001”

‘ エラーハンドリング:プロジェクトが開かれているか確認
On Error Resume Next

‘ 全リソースをループして回す(ここが効率化の鍵!)
For Each res In ActiveProject.Resources
‘ リソースが空(ダミー)でないか確認
If Not res Is Nothing Then

‘ 特定の条件で絞り込む(例:特定の部署や名前など)
‘ ここでは「テスト」という名前が含まれるリソースに設定する例
If InStr(res.Name, “テスト”) > 0 Then

‘ リソースの「テキスト1」フィールドにコストセンターを書き込み
res.Text1 = costCenter

‘ 成功したことをイミディエイトウィンドウに表示
Debug.Print “設定完了: ” & res.Name & ” -> ” & costCenter
End If
End If
Next res

MsgBox “リソースのコストセンター設定が完了しました!”, vbInformation
End Sub

—

3. このコードを理解するための「3つのポイント」

初学者の皆さんが躓きやすいポイントを整理しました。ここさえ押さえれば、他のフィールド操作も応用が効きます。

  • `For Each res In ActiveProject.Resources` の魔力
  • これは「リソース全員に一人ずつ声をかける」イメージです。Project内には「空のリソース」が存在する場合があるため、`If Not res Is Nothing` という安全装置を入れるのが、現場で生き残るエンジニアの作法です。
  • `Text1` って何?
  • Projectのカスタムフィールドは `Text1` 〜 `Text30` まで用意されています。GUI上で「テキスト1」と名前を変えていても、プログラムからは `Text1` と呼び出す必要があります。ここが混乱の元ですが、慣れれば簡単です。
  • `On Error Resume Next` の正しい使い方
  • 処理を止めないための魔法の言葉ですが、使いすぎるとエラー原因が分からなくなります。開発中はコメントアウトしてデバッグし、配布時に有効にするのがベストです。

—

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

1. 「オブジェクト変数または With ブロック変数が設定されていません」

  • 原因:プロジェクトが開かれていない、あるいはリソースが一件も登録されていない状態で実行していませんか?
  • 対策:`If ActiveProject Is Nothing Then Exit Sub` をコードの冒頭に入れましょう。

2. フィールド名が反映されない

  • 原因:表示上の名前を変えても、内部名は変わりません。
  • 対策:Projectの「ツール」>「ユーザー設定フィールド」で、内部名(Text1など)と表示名の対応を必ず確認してください。

—

5. 先輩エンジニアからのアドバイス

VBAの最大のメリットは「再現性」です。一度このスクリプトを組んでしまえば、どんなに大規模なプロジェクトでも、リソースの入れ替わりが激しい現場でも、コスト管理は「ワンクリック」で完了します。

最初は難しく感じるかもしれませんが、この「リソースのプロパティを書き換える」という操作ができるようになれば、あなたはもうProject VBAの初級者ではありません。次は、ExcelからCSVを読み込んで一括割り当てをする……といった、より実用的な自動化に挑戦してみてください。

「自動化」とは、単に楽をすることではなく、あなたが本来注力すべき「プロジェクトの価値向上」に時間を割くための投資です。

さあ、今日からコードを書いて、自分だけの管理ツールを育てていきましょう。応援しています!

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