Project VBAの真髄:フラグフィールドを活用した「自動重要度判定」でプロジェクトを掌握せよ
こんにちは。プロジェクト管理の現場で「なぜか進捗が可視化できない」「重要なタスクが埋もれてしまう」と悩んだことはありませんか?
多くの人が「マクロの記録」から一歩踏み出そうとして、Project VBAのオブジェクトモデルの複雑さに挫折します。しかし、安心してください。Project VBAは、Excel VBAよりも遥かに「整理された構造」をしています。
今日は、Projectの「フラグフィールド」を操り、あなたのプロジェクトに「自律的な判断力」を持たせる方法を伝授します。これさえ理解すれば、Project VBAの基本は完全にあなたの掌中にあります。
—
1. Project VBAの「地図」を頭に入れよう
Excelが「セル」の集合体であるのに対し、Projectは「階層構造」を持つ生命体です。
- Application: プロジェクトファイルそのもの。
- Project: 開いているプロジェクトの単位。
- Task: 作業の最小単位。ここがVBAの主戦場です。
- Resource: 人や設備。
今回使う「フラグフィールド(Flag1〜Flag20)」は、Taskオブジェクトが持つ特別な属性です。ここに値を書き込むことで、標準のビュー(ガントチャートなど)で色を変えたり、フィルターをかけたりすることが可能になります。
—
2. なぜ「フラグフィールド」なのか?
「なぜわざわざフラグを使うの? 直接色を変えればいいのでは?」と思うかもしれません。
しかし、コードで直接色を変えるのは「力技」であり、運用で破綻します。
VBAでフラグ(True/False)を制御し、Projectの「ビュー設定(条件付き書式)」でそのフラグを拾う。これが、保守性が高く、世界最高峰のエンジニアが選ぶ「正しいアーキテクチャ」です。
—
3. 実践:条件判定による自動フラグ付けコード
以下のコードは、「期間が10日以上」かつ「担当者が未割り当て」のタスクを自動検出し、`Flag1` をオンにするロジックです。
Sub HighlightHighPriorityTasks()
Dim tsk As Task
Dim proj As Project
Set proj = ActiveProject
‘ 念のため、全タスクのフラグを一度リセット(これ重要!)
For Each tsk In proj.Tasks
If Not tsk Is Nothing Then
tsk.Flag1 = False
End If
Next tsk
‘ 条件判定によるフラグ立て
For Each tsk In proj.Tasks
‘ 予約済みタスクや空行を除外する鉄則
If Not tsk Is Nothing And Not tsk.Summary Then
‘ 条件:期間が10日以上 かつ 担当者が空
If tsk.Duration > (10 480) And tsk.ResourceNames = “” Then ‘ Projectの期間単位は分(480分=1日)
tsk.Flag1 = True
End If
End If
Next tsk
MsgBox “重要タスクのフラグ付けが完了しました!”
End Sub
コードの重要ポイント(ここが分かればプロ級)
1. `Not tsk Is Nothing`: Projectには、削除されたタスクの残骸や空行が混じることがあります。これをチェックせずに回すと、VBAは即座にエラーを吐きます。
2. `tsk.Duration` の単位: Project内部では期間は「分」で管理されています。1日は標準で480分。ここを理解しているだけで、他の人との差は歴然です。
3. `tsk.Summary`: サマリータスク(親階層)を判定に含めると、計算が重複します。実作業のみを対象にするのが基本です。
—
4. 陥りやすい「罠」と解決策
初心者が必ずぶつかる壁が2つあります。
- 「ビューに反映されない!」:
コードを実行しただけでは、画面は変わりません。
解決策: プロジェクトのガントチャート上で、列の追加から「フラグ1」を追加し、「条件付き書式」で「Flag1がYesなら背景を赤にする」と設定してください。これでVBAとGUIが完璧に連携します。
- 「計算が遅い」:
数千行あるプロジェクトで毎回全ループを回すと時間がかかります。
解決策: 今回のように「一度リセットしてから再計算」というアルゴリズムを徹底してください。中途半端に値を残すと、後でバグの温床になります。
—
最後に:自動化の先にあるもの
このコードを「定型作業」から解放されたあなたの武器にしてください。
フラグフィールドは単なるスイッチではありません。「プロジェクトの健全性を守るためのセンサー」です。
ここをクリアできれば、次は「特定の条件下でメールを飛ばす」「Excelに進捗をエクスポートする」といった、より高度な自動化の世界が待っています。
VBAは、あなたの思考を拡張する魔法の杖です。まずはこのコードをコピペして、自分のタスクリストで動かしてみてください。分からないことがあれば、いつでもまた聞きに来てくださいね。応援しています!
