【入門編】リソースのスキルセットをカスタムフィールドで管理・検索するVBA – Project VBA解析バイブル

スポンサーリンク

【Project VBA極意】スキルコードで最適解を導け!リソース自動選定エンジンの作り方

こんにちは。現場で泥臭い自動化を積み重ね、いつしか「Project VBAの魔術師」と呼ばれるようになったエンジニアです。

皆さんは、Microsoft Projectでリソースの割り当てに苦労していませんか?「このタスクはJavaができる人がいいけど、空き状況はどうだ?」「コストも抑えたい…」なんて悩み、Excelで表を作って管理するのはもう終わりにしましょう。

今回は、Projectの隠れたポテンシャルである「カスタムフィールド」と「VBA」を組み合わせた、リソース自動選定エンジンの構築法を伝授します。マクロの記録を卒業し、真の「Projectの支配者」へステップアップしましょう!

—

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

Projectには「リソース」というオブジェクトがありますが、標準機能だけでは詳細なスキル管理はできません。そこで使うのが「Textフィールド」です。

  • Text1フィールド(例:「Java,SQL,AWS」のようにコンマ区切りでスキルを格納)

これをVBAで検索すれば、特定のスキルを持つリソースを瞬時に抽出できます。まずはこの「箱」を用意する、これが第一歩です。

—

2. リソース自動検索エンジン:実装コード

以下のコードは、指定したスキルを持つリソースを検索し、その名前をイミディエイトウィンドウに表示するシンプルなエンジンです。まずはここから理解しましょう。

‘ Project VBAにおけるリソース検索エンジンのコアロジック
Sub SearchResourcesBySkill()
Dim res As Resource
Dim targetSkill As String
Dim skillField As String

‘ 検索したいスキルコードを設定
targetSkill = “Java”

‘ ユーザーが見やすいよう、進捗を画面に表示
Debug.Print “— 検索開始: ” & targetSkill & ” —”

‘ プロジェクト内の全リソースをループ処理
‘ Projectのオブジェクト構造を意識することが大切です
For Each res In ActiveProject.Resources
‘ リソースが割り当て可能か、実在するかを判定
If Not res Is Nothing Then
‘ Text1フィールドにスキルが含まれているか判定
‘ InStr関数は文字列検索の基本。0より大きければ発見!
If InStr(1, res.Text1, targetSkill, vbTextCompare) > 0 Then
Debug.Print “発見: ” & res.Name & ” (ID: ” & res.ID & “)”
End If
End If
Next res

Debug.Print “— 検索終了 —”
End Sub

コードのここがポイント!

  • `For Each` ループ: Projectの全リソースを一つずつ「つまみ食い」する効率的な書き方です。
  • `InStr` 関数: 「文字列の中に特定の文字があるか」を判定する職人道具です。`vbTextCompare`を使うことで、大文字小文字の区別を無視して検索できるのがプロの気配りですね。

—

3. 初学者が陥りやすい「3つの落とし穴」

コードが動かない時、だいたいこのどれかです。

1. 「まだリソースが作成されていない」問題

  • VBAを実行する前に、プロジェクトにリソースを登録し、Text1に値を入力しておく必要があります。空っぽの箱を検索しても何も出ません。

2. 「オブジェクトがNothing」問題

  • リソースが削除されたり、未定義の状態でループするとエラーになります。必ず `If Not res Is Nothing Then` で生存確認を行いましょう。

3. 「Text1が見えない」問題

  • Projectのリソースシートで、列の右クリックから「列の挿入」→「テキスト1」を表示してください。ここが見えていないと管理できません。

—

4. さらに上を目指す君へ:応用のアドバイス

このコードをマスターしたら、次は「自動割り当て」に挑戦してください。

‘ 特定のタスクにリソースを割り当てる際の一節
‘ ActiveProject.Tasks(1).Assignments.Add ResourceID:=res.ID

この一行を追加するだけで、検索→選定→割り当てが自動化されます。リソースの稼働率(`res.Work`)をチェックして、空いている人だけを検索対象にする…そんな条件を加えれば、それはもう立派な「最適化エンジン」です。

—

最後に:自動化は「楽しむ」もの

Project VBAは、少し取っつきにくいかもしれません。しかし、一度「プロジェクトという巨大な迷路」をコードで制御できる感覚を覚えると、これほど面白いものはありません。

今回紹介したコードは、あくまで「基礎の基礎」です。ここから、「コストが安い順に並べ替えたい」「特定の部署のリソースだけ見たい」といった要望を一つずつ実装していってください。

ここをクリアすれば、あなたはもうマクロの記録から卒業した、立派なProject VBAエンジニアです。
困ったことがあれば、またいつでも聞きに来てください。あなたの自動化ライフを心から応援していますよ!

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