【入門編】【初心者向け】Task.Fontプロパティで進捗を可視化:特定の条件でタスクのフォント色を自動変更する入門 – Project VBA解析バイブル

スポンサーリンク

【Project VBAの極意】ガントチャートを「操る」。Task.Fontで進捗を可視化する第一歩

こんにちは。Project VBAの世界へようこそ。
もしあなたが今、「マクロの記録」から卒業し、自分の手でプロジェクトをコントロールしたいと考えているなら、あなたは正しい場所にいます。

Project VBAはExcel VBAとは少し毛色が違います。セルを操作するのではなく、「時間軸」と「依存関係」を持つ生き物のようなオブジェクトを相手にするからです。

今日は、その第一歩として「進捗に応じてタスクのフォント色を自動変更する」という、視認性向上のための基本テクニックを伝授します。

1. Project VBAの「階層構造」を理解する

まずは、戦う相手の姿を知りましょう。Projectのオブジェクトモデルは、非常に美しい階層構造をしています。

  • Application: Projectそのもの。全ての親。
  • Project: 開いているファイル単位。
  • Task: ガントチャート上の1行1行。ここが今回の主戦場です。
  • Resource: タスクに割り当てられる「人」や「機材」。

私たちが操作するのは、この`Task`オブジェクトの中に存在する`Font`プロパティです。これを書き換えることで、ガントチャートの表現力が劇的に変わります。

2. 実践:遅延タスクを「赤」で警告するコード

まずは、「進捗率が100%未満、かつ終了予定日が今日を過ぎている(=遅延している)タスク」を赤色にするスクリプトを書いてみましょう。

以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。

Sub HighlightDelayedTasks()
Dim tsk As Task
Dim proj As Project
Set proj = ActiveProject

‘ 全てのタスクをループ処理する
‘ ProjectではTaskは1から始まるコレクションです
For Each tsk In proj.Tasks
‘ 完了タスクやサマリータスクは除外するのが現場のセオリー
If Not tsk Is Nothing Then
If tsk.PercentComplete < 100 And tsk.Finish < Date And Not tsk.Summary Then ' Fontプロパティへのアクセス ' 太字にして、文字色を赤(vbRed)に変更 With tsk.Font .Color = pjRed .Bold = True End With End If End If Next tsk MsgBox "遅延タスクのハイライトが完了しました!", vbInformation End Sub ---

3. コードの「裏側」を読み解く

このコードには、現場で生き残るための「3つの知見」が隠されています。

① `If Not tsk Is Nothing` の重要性

ProjectのTaskコレクションは、途中に空行があったり、削除されたIDが含まれていたりすることがあります。`For Each`で回す際、`Nothing`(空のタスク)に触れると即座にエラーで落ちます。このガード句は、伝説のエンジニアへの第一歩です。

② `tsk.Summary` のチェック

Projectにおける「サマリータスク(親タスク)」は、子タスクの集計結果です。ここに直接色を塗ると、進捗計算の意図を隠してしまう可能性があります。基本的には、末端タスク(Work Task)のみを操作するのが可視化のコツです。

③ `Color`プロパティの指定

Excel VBAでは`RGB(255, 0, 0)`などを多用しますが、Project VBAには`pjRed`, `pjBlue`といった便利な定数が用意されています。まずはこれらを使って、コードの可読性を保ちましょう。

4. よくある失敗と回避策

初心者が必ずぶつかる壁が「元に戻せない」という問題です。

  • 元に戻せない(Undoが効かない): マクロによる変更は、ProjectのUndo履歴に残りません。
  • 対策: 色を変更する前に、必ず「元に戻すための初期化マクロ」もセットで作る習慣をつけましょう。

Sub ResetTaskFont()
Dim tsk As Task
For Each tsk In ActiveProject.Tasks
If Not tsk Is Nothing Then
‘ フォント設定をデフォルト(自動)に戻す
tsk.Font.Reset
End If
Next tsk
End Sub

最後に:エンジニアとしての視点

タスクに色を塗る。これだけの作業ですが、「チームがどこで立ち止まっているか」を直感的に伝えることは、マネジメントの質を大きく向上させます。

Project VBAを学ぶということは、単にコードを書くことではなく、プロジェクトという生き物の状態をコードで定義することです。

まずはこのコードを動かし、自分のガントチャートが「意思表示」を始める瞬間を体験してください。ここをクリアすれば、あなたはもうただのユーザーではありません。プロジェクトを支配する側の一員です。

次は、タスクバーの色(Shape)を変える高度なテクニックに挑戦しましょうか。準備ができたら、またいつでも戻ってきてくださいね。

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