【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)を変える高度なテクニックに挑戦しましょうか。準備ができたら、またいつでも戻ってきてくださいね。
