【入門編】Project VBAでの「ガントチャート」描画制御:バーのスタイルを依存関係で自動変更 – Project VBA解析バイブル

スポンサーリンク

Project VBAの深淵へ:ガントチャートを「操る」技術

こんにちは。自動化の海を渡り歩くエンジニアの諸君。
今日は、Project VBAの中でも特に「現場の視認性」を劇的に変える、ガントチャートの動的制御について紐解いていこう。

多くの人がマクロの記録で生成されたコードの迷路に迷い込む中、君たちが目指すべきは「Projectの心臓部(オブジェクトモデル)」を直接叩くアーキテクトの視点だ。

今回は、「依存関係(リンク)の種類に応じて、ガントバーの色を自動で染め上げる」という、現場のPMが泣いて喜ぶオートメーションを実装する。

1. なぜ「ガントバーの動的制御」が必要なのか?

ただの黒いバーが並んでいるガントチャートは、単なる「作業の羅列」だ。しかし、そこに「先行タスクとの関係性」が色分けされていればどうなる?

  • 赤色: クリティカルパス(遅延厳禁)
  • 青色: FS(終了→開始)による順当な流れ
  • 黄色: SS(開始→開始)による並行作業

このように視覚化するだけで、プロジェクトの「呼吸」が手に取るようにわかるようになる。これをVBAで自動化するのが、今回のミッションだ。

2. Projectオブジェクトモデルの核心:TaskとTaskLink

VBAでガントチャートを制御するには、`Task`オブジェクトと、その先にある`TaskLinks`コレクションを理解する必要がある。

  • Task: プロジェクトの最小単位。
  • TaskLink: タスク同士を結ぶ鎖。ここで`LinkType`(FS, SS, FF, SF)を判定する。

陥りがちな罠:プロパティへの直接アクセス

多くの初心者は、バーのスタイルを変更しようとして、無理やりGUIの設定をいじろうとする。それは間違いだ。Project VBAにおいて、バーの見た目は「BarStyles」というコレクションを操作することで制御する。

3. 実践コード:依存関係に応じたバーの塗り分け

以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてほしい。タスクをループで巡回し、リンクの種類を判定して色を塗り替えるアーキテクチャだ。

Sub DynamicGanttStyling()
Dim tsk As Task
Dim tskLink As TaskLink

‘ プロジェクト内の全タスクを走査
For Each tsk In ActiveProject.Tasks
If Not tsk Is Nothing Then
‘ 先行タスクが存在する場合のみ判定
If tsk.TaskLinks.Count > 0 Then
Set tskLink = tsk.TaskLinks(1) ‘ 最初のリンクを参照

‘ リンクの種類に応じて色を変更(例: FSなら青、SSなら緑)
Select Case tskLink.LinkType
Case pjFinishToStart ‘ FS: 終了後に開始
‘ BarStyleの制御は、実際にはタスクの「色」プロパティを操作する
tsk.BarColor = pjBlue

Case pjStartToStart ‘ SS: 同時進行
tsk.BarColor = pjGreen

Case Else
tsk.BarColor = pjGray
End Select
End If
End If
Next tsk

MsgBox “ガントチャートの最適化が完了しました。視覚的な整理を終えました。”
End Sub

4. コードの解説と「知的な」注意点

なぜ `If Not tsk Is Nothing` が必要なのか?

Projectのタスクリストには、削除された行や空行が「Nothing」として潜んでいることがある。ここをスルーする処理を入れないと、容赦なく「オブジェクトが必要です」というエラーが君を襲う。これはVBAにおける「生存戦略」の基本だ。

BarColorは「上書き」される

このコードはタスクの`BarColor`プロパティを直接書き換えている。一度実行すると、手動で設定した色を上書きする。もし元に戻したい場合は、`tsk.BarColor = pjAutomatic` を呼び出すリセットルーチンを別に用意しておくのが、真のエンジニアの流儀だ。

5. 次のステップへ:君が目指すべき場所

今回のコードは、ガントチャートを「ただ眺めるもの」から「情報を発信するもの」へ変える第一歩だ。

ここをクリアしたら、次は以下のトピックに挑戦してみてほしい。
1. イベント駆動: タスクが更新された瞬間に自動で色を塗り替える `Project_Change` イベントの活用。
2. パフォーマンス: 数千行のタスクを扱う際の `ScreenUpdating = False` による高速化。

Project VBAの世界は奥深い。だが、オブジェクトモデルの「階層構造」さえ掴んでしまえば、どんな複雑なスケジュールも君の指先一つで操れるようになる。

分からないことがあれば、いつでも聞きに来てくれ。君の自動化ライフを、心から応援しているよ。

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