【入門編】【初心者向け】タスクの「名前」をキーにして、特定のタスクを検索・取得する高速なFindメソッド活用法 – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:タスク検索の「黄金律」をマスターする

こんにちは。現場の最前線でVBAと向き合い続けるエンジニアです。

Project VBAを触り始めた皆さんが、まず最初にぶつかる壁。それが「特定のタスクをどうやって見つけ出すか」という問題です。「マクロの記録」で生成されたコードは、タスクをID(番号)で指定することが多いですが、現場の実務ではIDは並び替えでコロコロ変わるもの。

IDに依存せず、タスクの「名前」をキーにして自在に操る手法こそ、自動化の第一歩です。今日は、Project VBAにおける「検索の極意」を伝授しましょう。

1. なぜ「Findメソッド」なのか?

初心者の方は、よくループ処理(`For Each`)を使って全タスクを一つずつ名前比較しがちです。

‘ 【非推奨】全件ループは大規模プロジェクトで悲劇を生む
For Each t In ActiveProject.Tasks
If t.Name = “要件定義” Then
‘ 処理
End If
Next t

これでも動きますが、タスクが数千行を超えた瞬間、マクロは重く鈍くなります。ここで登場するのが、Project VBAが用意した高速検索エンジン「Findメソッド」です。これはSQLで言うところのインデックス検索に近く、圧倒的なパフォーマンスを誇ります。

2. タスクを高速で射抜くための実装コード

まずは、特定のタスク名からオブジェクトを特定し、その「開始日」や「期間」を書き換えるコードを見てみましょう。

Sub FindAndModifyTask()
Dim tsk As Task

‘ 1. 検索実行: “要件定義” という名前のタスクを検索
‘ Field: 検索対象(pjTaskNameはタスク名)
‘ Test: 条件(pjContainsは部分一致、pjEqualsは完全一致)
‘ Value: 探したい文字列
ActiveProject.Tasks.Find Field:=”Name”, Test:=”equals”, Value:=”要件定義”

‘ 2. 検索結果の取得: ActiveSelection.Tasks(1) が見つかったタスク
If ActiveSelection.Tasks.Count > 0 Then
Set tsk = ActiveSelection.Tasks(1)

‘ 3. プロパティの更新
tsk.Duration = “5d”
tsk.Notes = “自動化スクリプトにより更新されました”

MsgBox “タスク「” & tsk.Name & “」の更新が完了しました。”
Else
MsgBox “対象のタスクが見つかりませんでした。”
End If
End Sub

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

① 検索の「土俵」を理解する

`ActiveProject.Tasks.Find` を実行すると、Projectは「選択状態(Selection)」を検索結果に書き換えます。つまり、検索した瞬間に、そのタスクが画面上で「選択された状態」になるのです。だからこそ、`ActiveSelection.Tasks(1)` でそのタスクにアクセスできるという仕組みです。

② `Test` 引数の魔法

  • `pjEquals`: 完全一致。名前が完全に一致しないとヒットしません。
  • `pjContains`: 部分一致。例えば「要件」と入力すれば「要件定義」「要件分析」などがヒットします。用途に合わせて使い分けましょう。

③ 陥りやすい罠:エラーハンドリング

もし検索にヒットしなかった場合、`ActiveSelection` は「何も選択されていない」状態になります。ここで無理に `Tasks(1)` にアクセスしようとすると、「インデックスが範囲外です」というエラーでプログラムが停止します。必ず `If ActiveSelection.Tasks.Count > 0 Then` で存在チェックを行うこと。 これがプロの流儀です。

4. さらなる高みへ:なぜ「名前検索」が最強なのか

実務において、タスクIDは「魔法の数字」ではありません。ガントチャートの並び順を変えたり、新しいタスクを挿入したりした瞬間に、そのIDは意味をなさなくなります。

しかし、「名前」はタスクのアイデンティティです。
名前をキーにしてタスクを特定する癖をつけておけば、どんなに複雑なスケジュール変更が起きても、あなたのマクロは壊れることなく動き続けます。

最後に:先輩からのアドバイス

「検索」は自動化の要です。まずは今日紹介したコードを、ご自身のプロジェクトファイルで動かしてみてください。

「動いた!」という感動の次に、「もし検索対象が複数あったらどうするんだろう?」「前提条件(リンク)を自動で貼るには?」という疑問が湧いてくるはずです。その疑問こそが、皆さんがエンジニアとして進化している証拠です。

ここをクリアしたあなたは、もう「マクロの記録」に頼る初心者ではありません。次は依存関係の操作や、WBSの階層構造(アウトライン)の自動生成に挑戦してみましょう。

また次のステップでお会いしましょう!応援しています。

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