【入門編】【初心者向け】特定のキーワードを含むタスクを一括検索し、色付けやフラグ立てを行うタスク走査の基本 – Project VBA解析バイブル

スポンサーリンク

こんにちは!Project VBAの世界へようこそ。
マクロの記録ボタンを押すだけの日常から一歩踏み出し、「自分の手でプロジェクトを意のままにコントロールしたい」と思い立ったあなたへ。

今回は、数あるProject VBAの機能の中でも、実務で最も頻繁に使う「タスクの一括走査(ループ処理)と条件分岐」をマスターしましょう。

「大量のタスクから、特定のキーワードが入っているものだけを見つけて目立たせたい」
そんな現場の要望を瞬時に解決する基本のテンプレートを、世界最高峰のアーキテクトである私から、優しく丁寧にお伝えします。
ここをクリアすれば、Project VBAの基本はバッチリですよ!

—

1. なぜ「タスクの走査」がProject VBAの基本にして極意なのか?

Excel VBAであれば、セルを上から順に `For` ループで舐めていくのは朝飯前ですよね。
しかし、Microsoft Projectの世界には、Excelにはない「WBS(階層構造)」という概念が存在します。

プロジェクトマネジメントをしていると、こんな作業が発生しませんか?

  • 「『レビュー』という言葉が含まれるタスクを全部見つけて、赤くハイライトしたい」
  • 「特定の担当者がアサインされているタスクにフラグを立てたい」

これを手作業でやっていたら、目がチカチカするし、何より漏れが発生します。
だからこそ、VBAの出番です。Projectの頭脳である `ActiveProject` からタスクのコレクション(集まり)を取り出し、プログラムに一瞬で片付けさせましょう。

—

2. 【実践】キーワードを含むタスクを自動で色付け・フラグ立てするコード

まずは、開発の現場でそのままコピペして使える実用コードをプレゼントします。
VBE(Visual Basic Editor)を開き、標準モジュールにペーストしてみてください。

Sub HighlightAndFlagTasks()
‘ =====================================================================
‘ 概要: アクティブプロジェクトの全タスクを走査し、
‘ 特定キーワードを含むタスクの背景色変更とフラグ立てを行う
‘ =====================================================================

Dim tsk As Task
Dim targetKeyword As String
Dim hitCount As Long

‘ 1. 検索したいキーワードを設定します(例: “レビュー”)
targetKeyword = “レビュー”
hitCount = 0

‘ 2. 処理速度向上のため、画面更新を一時停止(お作法その1)
Application.ScreenUpdating = False

‘ 3. エラーハンドリングの準備
On Error GoTo ErrorHandler

‘ 4. アクティブプロジェクトのタスクコレクションをループ処理
For Each tsk In ActiveProject.Tasks

‘ 削除されたタスクやサマリータスク(見出し)の空行などを除外する安全チェック
If Not tsk Is Nothing Then
If tsk.Active Then ‘ アクティブなタスクのみ対象

‘ タスク名(Name)にキーワードが含まれているか判定
If InStr(1, tsk.Name, targetKeyword, vbTextCompare) > 0 Then

‘ —【加工処理①】タスク行の背景色を黄色に変更 —
‘ ※Note: Projectのフォント/色変更はCellEditプロパティ等を使いますが、
‘ 今回は直感的に分かりやすい「フラグフィールドへの代入」をメインにします。

‘ —【加工処理②】フラグフィールド(Flag1)に「Yes」を立てる —
tsk.Flag1 = True

‘ ノート欄に自動検出された旨を記録(任意)
tsk.Notes = “VBAにより自動検出されたタスクです (” & Format(Now, “yyyy/mm/dd”) & “)”

hitCount = hitCount + 1
End If

End If
End If

Next tsk

‘ 5. 処理終了の通知
Application.ScreenUpdating = True
MsgBox “処理が完了しました!” & vbCrLf & _
“キーワード「 ” & targetKeyword & ” 」に一致したタスク: ” & hitCount & “件”, _
vbInformation, “自動化完了”

Exit Sub

ErrorHandler:
‘ エラー時の復旧処理
Application.ScreenUpdating = True
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”

End Sub

—

3. コードの急所を解剖する!知っておくべき3つのポイント

初心者の方が「おっ」とつまずきやすいポイントを、スマートに解説しておきましょう。

① `For Each tsk In ActiveProject.Tasks` の魔力

Excelの `Range` や `Rows` と同じ感覚ですが、Projectの `Tasks` コレクションはプロジェクト内のすべてのタスク(サマリータスクやマイルストーンを含む)の集合体です。
`For Each` を使えば、階層の深さを意識せずに上から順に全タスクを優しく舐めていくことができます。

② `Not tsk Is Nothing` という名の「防波堤」

Project VBAを書く上で最も多いエラーが、この `Nothing`(空っぽのオブジェクト)へのアクセスです。
プロジェクトの途中でタスクを削除した跡地などが残っている場合、ループが空っぽのタスクを掴んでエラーを起こすことがあります。
「処理の前に、そこにタスクが存在するか確認する」。これがプロのエンジニアの防御作法です。

③ 文字列検索の隠し味 `InStr` と `vbTextCompare`

`InStr(1, tsk.Name, targetKeyword, vbTextCompare)` は、「タスク名の中にキーワードが含まれているか?」を調べる関数です。
最後の `vbTextCompare` がミソ。これをつけておくと、大文字・小文字、さらには全角・半角の揺れをある程度よしなに吸収して検索してくれます。優しい世界ですね。

—

4. 初心者が陥りやすい「罠」と回避のコツ

罠:処理が遅くてイライラする

もしあなたのプロジェクトに数千行のタスクがある場合、コードを実行した瞬間に画面がチラつき、フリーズしたような感覚に陥るかもしれません。

回避策:
コード内にも入れた `Application.ScreenUpdating = False` です。
VBAに「画面の描き直しを禁止するから、裏で高速に処理しなさい」と命令することで、処理速度が劇的に跳ね上がります。処理の最後には必ず `True` に戻すのを忘れないようにしましょう。

—

おわりに:ここからあなたの自動化の旅が始まる

お疲れ様でした!
今回学んだ「コレクションの走査」「条件分岐」「プロパティの書き換え」は、Project VBAの全機能の基盤(土台)となる最も重要な要素です。

この基本形 さえ体に染み込ませれば、あとは「条件を日付に変える」「担当者名に変える」だけで、どんな巨大なプロジェクトもあなたの自由自在にコントロールできるようになります。

難しく考える必要はありません。まずは上記のコードをコピペして、自分のプロジェクトで動かしてみてください。「お、動いた!」という感動こそが、最高のエンジニアへの第一歩です。

それでは、次回の極限の知見でお会いしましょう。あなたのプロジェクト管理が優雅なものになりますように!

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