【入門編】リソースの「割り当て」削除時に発生する「実績工数の整合性」を保つ安全な削除処理 – Project VBA解析バイブル

スポンサーリンク

プロジェクト管理の「地雷」を回避せよ:VBAでリソース割り当てを安全に削除する極意

こんにちは。プロジェクトの現場で日々VBAと格闘している皆さん、お疲れ様です。

マクロの記録で操作を自動化することから一歩進み、プログラムの裏側にある「オブジェクトのライフサイクル」を意識し始めた時、皆さんは必ず一度、ある壁にぶつかります。それは、「実績(Actuals)が入力済みのタスクから、リソースを削除する際の整合性問題」です。

「リソースを外すだけなのに、なぜか全体の工数が狂う」「エラーでVBAが止まる」。これらは、Projectのデータモデルが持つ「歴史的整合性」を無視した時に起こる、いわば現場の地雷です。今日は、この地雷を華麗に回避し、安全にリソースを削除するためのプロフェッショナルな作法を伝授します。

—

1. なぜ「削除」でエラーが起きるのか?

Project VBAにおいて、`Assignment`(割り当て)オブジェクトは単なるリンクではありません。そこには、そのリソースが「いつ」「どれだけの工数」を費やしたかという実績値が紐付いています。

安易に `Assignment.Delete` を実行すると、Projectは「今までそのリソースが積んできた実績の行き場」を失い、計算の整合性を保てずエラーを吐くか、あるいは予期せぬ数値の再配分(バックグラウンドでの自動調整)を引き起こします。

これを防ぐための鉄則は、「実績をクリアしてから削除する」という一連のトランザクションを確実に踏むことです。

—

2. 安全な削除のための「3つのステップ」

コードを書く前に、以下の手順を脳内に刻んでください。

1. 判定: その割り当てに実績工数(`ActualWork`)が存在するかを確認。
2. 初期化: 実績がある場合、その値をゼロにリセットする。
3. 解放: その後、初めて `Delete` メソッドを呼び出す。

実装コード例:安全なリソース削除プロシージャ

以下は、選択中のタスクから指定リソースを安全に取り除くための実用コードです。

Sub SafeRemoveResource(targetTask As Task, resourceName As String)
Dim asn As Assignment

‘ タスク内の全割り当てをループして対象を探す
For Each asn In targetTask.Assignments
If asn.ResourceName = resourceName Then

‘ 【重要】実績工数が存在するか確認
If asn.ActualWork > 0 Then
‘ 実績を一度クリアする(これにより計算の矛盾を防ぐ)
asn.ActualWork = 0
Debug.Print “実績をクリアしました: ” & asn.ResourceName
End If

‘ 実績ゼロを確認してから安全に削除
asn.Delete
Debug.Print “リソースを削除しました: ” & resourceName

Exit Sub ‘ 削除完了後はループを抜ける
End If
Next asn

MsgBox “指定されたリソースは見つかりませんでした。”, vbExclamation
End Sub

—

3. このコードが「プロ仕様」である理由

なぜ単に `.Delete` してはいけないのか。それは、Projectのエンジンが「過去の実績と現在の計画のギャップ」をリアルタイムで再計算し続ける性質を持っているからです。

  • `ActualWork = 0` の意義:

これは単なる代入ではありません。Projectに対して「このタスクにおけるこのリソースの存在価値(実績)をゼロにする」という合図を送っています。これを怠ると、Projectは「割り当てが消えたのに実績工数だけ残っている」という不正な状態を検知し、別のリソースに工数を押し付けたり、タスク全体の進捗率を破壊したりします。

  • エラーハンドリングの視点:

実際の業務では、`asn.ActualWork` 以外にも `ActualCost` なども考慮すべき場合があります。もし「実績がある場合は削除させない(承認フローを通す)」という要件があれば、上記の `If` 文の中で `MsgBox` を出し、`Exit Sub` で終了させるだけで、現場のルールを強制することも可能です。

—

4. 最後に:マクロの記録から脱却した皆さんへ

皆さんが今書いているその数行のコードは、単に作業を楽にするだけのものではありません。「プロジェクトデータの正確性」を守るための門番です。

Project VBAを扱う際は、「自分が操作しているのは画面上のセルではなく、複雑に絡み合ったリレーショナルデータベースである」という意識を持ってください。今回紹介した「実績のクリア」は、その第一歩です。

ここをマスターすれば、皆さんの自動化ツールは「動けばいいもの」から「信頼できる業務システム」へと進化します。また分からないことがあれば、いつでも聞きに来てくださいね。次回のステップも楽しみにしていますよ!

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