Project VBAの真髄:マイルストーンを「自動で掌握」する極限の自動化術
こんにちは。Project VBAの世界へようこそ。
ExcelのVBAには慣れていても、ProjectのVBA(Microsoft Project Object Model)に触れた瞬間、「あれ?動きが全然違うぞ?」と戸惑ったことはありませんか?
Projectは単なる「行と列」の表ではありません。「時間軸」と「依存関係」という、生きたネットワークを扱うエンジンです。今日は、あなたのプロジェクト管理を劇的にスマートにする「マイルストーン自動判定ツール」を通じて、Project VBAの核心に迫りましょう。
—
1. なぜ「マイルストーン判定」なのか?
マイルストーンは、プロジェクトにおける「心拍数」です。これが0日か否かを判定し、視覚的に強調することは、ステークホルダーへの報告品質を均一化する絶対的な基礎スキルです。
マクロの記録に頼り切りな段階を卒業し、「オブジェクトを直接操作する」感覚を身につけましょう。
—
2. Project VBAの核心:オブジェクトの階層構造
コードを書く前に、Projectの「脳内地図」を整理します。
- Application: Project全体を支配する神。
- Project: 開かれているプロジェクトファイルそのもの。
- Task: 計画の最小単位。今回の主役です。
Project VBAにおいて、タスクは「Taskオブジェクト」として存在し、それぞれが`Duration`(期間)や`Flag1`(カスタムフラグ)というプロパティを持っています。今回は「期間が0日ならフラグを立て、書式を変える」というロジックを実装します。
—
3. 実装:マイルストーン自動化コード
以下のコードをVBE(Visual Basic Editor)に貼り付けてみてください。なぜこの書き方なのか、その理由はコードの後の解説で明らかにします。
Sub AutoFlagMilestones()
‘ Projectオブジェクトを明示的に取得
Dim proj As Project
Set proj = ActiveProject
Dim tsk As Task
‘ プロジェクト内の全タスクを走査する
‘ ここで「For Each」を使うのがProject VBAの定石です
For Each tsk In proj.Tasks
‘ 念のため、空行(タスクが存在しない行)をスキップ
If Not tsk Is Nothing Then
‘ 期間が0日(マイルストーン)か判定
If tsk.Duration = 0 Then
‘ Flag1をONにする(後続のビュー設定で活用可能)
tsk.Flag1 = True
‘ 背景色を薄い黄色に変更(視覚的強調)
tsk.TaskColor = vbYellow
Else
‘ それ以外はフラグを解除して色を戻す
tsk.Flag1 = False
tsk.TaskColor = vbBlack
End If
End If
Next tsk
MsgBox “マイルストーンの自動判定が完了しました!”, vbInformation
End Sub
—
4. 初学者が陥りやすい「3つの罠」
このコードを書く際、多くの人が躓くポイントを先回りして解説します。
① 「Nothing」のチェックを忘れる
Projectの`Tasks`コレクションには、稀に「空行」が含まれることがあります。`If Not tsk Is Nothing` を入れないと、途中でマクロがエラーを吐いて停止します。「オブジェクトは常に生存確認をせよ」が鉄則です。
② 計算結果と入力値の混同
`Duration`は内部的に「分」で保持されています。0日判定を行う際は `0` と比較すればOKですが、もし「2日」などを扱う場合は `(2 8 60)` のように分単位での計算が必要になることを覚えておいてください。
③ 再計算のオーバーヘッド
大規模なプロジェクト(数千タスク)でこのマクロを回すと、都度プロジェクトが再計算を行い、動作が重くなることがあります。その場合は、マクロの冒頭に `Application.Calculation = pjManual` を入れ、最後に `pjAutomatic` に戻すのがプロのテクニックです。
—
5. 次のステップ:さらなる高みへ
このコードをマスターすれば、次は「Flag1が立っているタスクだけをフィルタリングしてPDFレポートを作成する」といった自動化へ繋げることができます。
「自動化」とは、単に作業を速くすることではなく、人間が判断すべき「重要なマイルストーン」を、システムに正しく認識させるプロセスです。
ここをクリアすれば、あなたはもうVBAの初心者ではありません。Projectの構造を自在に操る「アーキテクト」への第一歩を踏み出したのです。何か分からないことがあれば、いつでも聞いてくださいね。あなたの開発を全力でサポートします!
