こんにちは。現場の最前線でコードを書き続けているエンジニアです。
「マクロの記録」で生成された汚れたコードに疲れていませんか? プロジェクト管理の現場において、リソース(人や設備)のデータ整合性は、いわばプロジェクトの「血液」です。ここが滞れば、コスト計算も稼働率調整もすべて崩壊します。
今日は、Project VBA(MS Projectの自動化)の世界において、もっとも基本的でありながら、一生モノの武器になる「リソース・バリデーションツール」の極意を伝授します。
—
なぜ「チェックリスト」が必要なのか?
プロジェクトが大規模化すると、誰かが「単価を入れ忘れた」「カレンダーの割り当てを忘れた」という初歩的なミスが必ず発生します。これを手作業で追いかけるのは時間の無駄です。
今回作成するのは、「必須項目が欠けているリソースを瞬時にリストアップし、修正箇所をピンポイントで指摘する」というエンジニアの守護神のようなツールです。
—
1. Project VBAの「地図」を理解する
まず、Project VBAを操る上で避けて通れない「階層構造」をイメージしてください。
- Project Object: プロジェクト全体そのもの
- Resources Collection: 全リソースの集合体
- Resource Object: 個別のリソース(「田中さん」や「開発サーバー」など)
この「Resource」の中にあるプロパティ(単価やカレンダー)を一つずつ覗きに行く……これが自動化の第一歩です。
—
2. 実践:リソースバリデーションコード
それでは、実際に使えるコードを見てみましょう。このコードを標準モジュールに貼り付けて実行してください。
Sub ValidateResourceData()
Dim res As Resource
Dim msg As String
Dim isError As Boolean
‘ 全リソースをループ処理する
‘ ここがProject VBAの心臓部。For Eachで回すのが鉄則です
For Each res In ActiveProject.Resources
isError = False
msg = “”
‘ 1. 名前が空でないかチェック
If res.Name = “” Then
msg = msg & “【名前未設定】”
isError = True
End If
‘ 2. 標準単価が0でないか(コスト管理の基本)
If res.StandardRate = 0 Then
msg = msg & “【単価未設定】”
isError = True
End If
‘ 3. カレンダーが設定されているか
If res.Calendar = “” Then
msg = msg & “【カレンダー未選択】”
isError = True
End If
‘ エラーがある場合のみイミディエイトウィンドウに出力
‘ 現場ではここに「エラーセルに色を塗る」処理を加えてもOKです
If isError Then
Debug.Print “ID:” & res.ID & ” 名前:” & res.Name & ” -> ” & msg
End If
Next res
MsgBox “チェック完了!エラー詳細はイミディエイトウィンドウ(Ctrl+G)を確認してください。”
End Sub
コードのここがポイント!
- For Each res In ActiveProject.Resources: これが「全リソースを舐める」という魔法の呪文です。インデックス番号を指定するより圧倒的にバグが少なく、読みやすい。
- Debug.Print: 画面にいちいちポップアップを出すと作業が止まります。開発者は「イミディエイトウィンドウ」を使いこなしましょう。
—
3. 初心者が陥りやすい「3つの落とし穴」
コードが動いたからといって油断してはいけません。現場で生き残るために、以下の3点だけは覚えておいてください。
① 「Nothing」の罠
リソースが存在しない場合や、途中で削除された場合にコードが停止することがあります。`If Not res Is Nothing Then` といったNULLチェックを癖にしましょう。
② 計算負荷を意識する
リソースが数千人規模になると、ループを回すだけで数秒かかることがあります。`Application.ScreenUpdating = False` をコードの最初に入れるだけで、劇的に速度が向上します。
③ ユーザーへの優しさ
エラーを指摘するだけでなく、「具体的にどこを直せばいいか」をメッセージに含めること。これができるエンジニアは、チームからの信頼が段違いです。
—
まとめ:ここをクリアすれば、あなたはもう「脱・初心者」
リソースの整合性をプログラムで担保する。これは、単なる「作業効率化」ではありません。「プロジェクトの品質を技術で守る」というプロフェッショナルの姿勢そのものです。
まずは、このコードを自分の環境で動かし、「何が起きているのか」をステップ実行(F8キー)で追ってみてください。その一歩が、あなたの自動化スキルを一段上のステージへ引き上げます。
もし詰まったら、いつでも戻ってきてください。私たちはコードを通じて、現場をより良くしていく仲間ですから。応援しています!
