【入門編】初心者向け:手動タスクと自動タスクの判別ロジックとUIへの反映 – Project VBA解析バイブル

スポンサーリンク

こんにちは!Project VBAの世界へようこそ。
マクロの記録から一歩踏み出し、自分だけの業務自動化エンジンを構築しようとしているあなたを、私は心から歓迎します。

今回は、Microsoft Projectの心臓部である「スケジュール計算エンジン」をVBAで手なずける方法を解説します。
テーマは「手動タスク(Manual)と自動タスク(Auto)の判別ロジックと、UI(見た目)への華麗な反映」です。

ここをクリアすれば、Project VBAの基本だけでなく、プロジェクト管理ツールの「裏側の仕組み」までが見えてきます。さあ、一緒に扉を開けましょう!

—

なぜ「手動」と「自動」をVBAで制御する必要があるのか?

Microsoft Projectには、大きく分けて2種類のタスクが存在します。

1. 手動タスク(Manual / Task.Manual = True)

  • エクセル感覚で自由に入力できる。「とりあえず期間を3日にしておこう」といった、スケジュール計算エンジンが干渉しない自由度の高い状態。

2. 自動タスク(Auto / Task.Manual = False)

  • Projectの最強エンジンが自動で日付を計算する。「前のタスクが終わったら自動で開始日を後ろにずらす」といった連動管理が可能。

実務では、「初版のWBS(作業分解構成図)をインポートしたときは全部手動だったけれど、本格稼働する前にすべて自動タスクに切り替えてエンジンの恩恵を受けたい。ついでに、どちらのモードなのかパッと見でわかるように色をつけたい」という要望が頻発します。

これを手作業でやっていたら日が暮れてしまいますよね。だからこそ、VBAの出番です!

—

現場で即戦力になる!判定&色分け自動化スクリプト

それでは早速、実際のコードを見てみましょう。
開発タブの「Visual Basic」を開き、標準モジュールに以下のコードを貼り付けてみてください。

Sub HighlightAndConvertTasks()
Dim t As Task
Dim countAuto As Long
Dim countManual As Long

‘ エラー対策と描画停止(パフォーマンス向上の極意)
On Error GoTo ErrorHandler
Application.ScreenUpdating = False

countAuto = 0
countManual = 0

‘ プロジェクト内のすべてのタスクを巡回するループ
For Each t In ActiveProject.Tasks
‘ タスクが存在するか(空行ではないか)のチェック
If Not t Is Nothing Then

‘ 【判定ロジック】Task.Manualプロパティをチェック
If t.Manual = True Then
‘ — 手動タスクの場合の処理 —
countManual = countManual + 1

‘ 背景色を「薄い黄色」に変更してUIに反映する
t.CellColor = pjYellow

Else
‘ — 自動タスクの場合の処理 —
countAuto = countAuto + 1

‘ 背景色を「薄い緑色」に変更してUIに反映する
t.CellColor = pjLightGreen

End If

End If
Next t

‘ 描画を再開
Application.ScreenUpdating = True

‘ 実行結果をユーザーに優しく通知
MsgBox “タスクの解析が完了しました!” & vbCrLf & _
“・自動タスク: ” & countAuto & “件(緑)” & vbCrLf & _
“・手動タスク: ” & countManual & “件(黄色)”, vbInformation, “スケジュール診断”

Exit Sub

ErrorHandler:
‘ 万が一のエラー時も画面描画だけは復元する(エンジニアの優しさ)
Application.ScreenUpdating = True
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

コードの注目ポイントと初心者がハマりやすい罠

このコードには、実務で絶対に知っておくべき「Project VBAならではのコツ」が詰まっています。一つずつ紐解いていきましょう。

1. `Task.Manual` という真実

コードの中核にあるのが `t.Manual` というプロパティです。

  • `True` ならば手動タスク
  • `False` ならば自動タスク

これだけで、ユーザーがUI上でどちらを選んでいるかを完璧に判定できます。Excelのセルのように「見た目の文字列」を推測する必要はなく、プロパティを直接ブール値(True/False)で取得できるのがProject VBAの美しいところです。

2. 見た目(UI)を操作する `CellColor`

`t.CellColor = pjYellow` の部分です。
Projectのガントチャートやタスクシートのセルに色を塗ることで、ユーザーが視覚的に状態を把握できるようになります。「あ、この行はまだ手動のままだからエンジンの計算が効いていないな」と、一目でわかるUIを提供できます。

3. パフォーマンスの魔術:`Application.ScreenUpdating = False`

ここが一番重要です。
もしタスクが5,000件あった場合、VBAが1行色を変えるたびに画面を再描画(チラツキ)させていたら、処理が終わるまでに何分もかかってしまいます。
処理の最初に画面描画を止め(`False`)、最後に再開する(`True`)ことで、爆発的なスピードアップを実現できます。これはプロの現場では必須のテクニックです。

—

さらにステップアップしたいあなたへ

今回は「判定して色を塗る」ところまででしたが、これを応用すれば、「手動タスクを検知したら、強制的に `t.Manual = False` に書き換えて自動タスクに変換するエンジン」を作ることも容易です。

‘ 【おまけ】すべてのタスクを強制的に自動タスクへ変換する魔法の一行
t.Manual = False

このコードをループの中に組み込むだけで、バラバラに入力されたスケジュールを、Microsoft Projectの計算エンジンが完璧に連動する「生きたスケジュール」へと一瞬で生まれ変わらせることができます。

「ここをこう変えたいけれど、どう書けばいいんだろう?」と迷ったら、いつでも扉を叩いてください。
焦らず、一つずつコードの意味を噛み砕いていけば、あなたも必ずProject VBAを完全に手なずけることができますよ。バッチリですね!

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