【入門編】【初心者向け】作成したタスクに「マイルストーン」属性をVBAで一括付与する自動化スクリプト – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「節目」を魔法のように制御する:Project VBAでマイルストーンを一括設定しよう

こんにちは。プロジェクトの現場で泥臭い手作業に追われていませんか?

「タスクを100個登録したけれど、マイルストーンにするために一つずつ期間を0にして…」なんて作業を繰り返しているなら、今日で卒業です。

Project VBAの真髄は、「手作業の再現」ではなく「オブジェクトの属性を一瞬で書き換える」ことにあります。今回は、Projectのタスクを「マイルストーン(期間0日)」へ一括変換する、シンプルかつ強力な自動化術を伝授します。

1. なぜ「マイルストーン」なのか?

マイルストーンとは、単なる「期間0日のタスク」ではありません。プロジェクトという長い航海における「寄港地」です。

  • 進捗の可視化: 完了報告や承認のポイントを明示できる。
  • 依存関係の基準: 「この会議が終わったら次へ進む」という依存関係の起点になる。

これを手動で設定するのは時間の無駄。VBAで制御すれば、数千行のタスクも一瞬で「節目」に変わります。

2. 魔法のコード:MilestoneSetter

まずは、こちらのコードをご覧ください。ProjectのVBAエディタ(`Alt + F11`)を開き、標準モジュールに貼り付けてみてください。

Sub ConvertToMilestone()
‘ プロジェクト内の全タスクを走査するアーキテクトの基本形
Dim tsk As Task
Dim proj As Project

Set proj = ActiveProject

‘ エラーハンドリング:タスクが一つもない場合を考慮
If proj.Tasks.Count = 0 Then
MsgBox “タスクが登録されていません。”, vbExclamation
Exit Sub
End If

‘ 選択中のタスクのみを対象にするか、全タスクか?
‘ 今回はシンプルに「全タスクをマイルストーン化」する設定にします
For Each tsk In proj.Tasks
‘ 念のため、空のタスク(Summary Task等)を除外する判定を入れるのが玄人の流儀
If Not tsk Is Nothing Then
If Not tsk.Summary Then
‘ ここが肝!期間を0にすればProjectは自動的にマイルストーンと認識する
tsk.Duration = 0
End If
End If
Next tsk

MsgBox “全タスクのマイルストーン化が完了しました!”, vbInformation
End Sub

コードの解説:ここが「VBAの極意」

1. `For Each tsk In proj.Tasks`: プロジェクト内の全タスクを一つずつ手繰り寄せます。これがProject VBAにおけるもっとも効率的なループ処理です。
2. `If Not tsk.Summary`: ここが重要です。サマリータスク(親階層)の期間を0にすると、プロジェクト全体の構造が崩壊します。「子タスクだけを狙い撃つ」という配慮が、現場で事故を起こさないためのプロの知恵です。
3. `tsk.Duration = 0`: 期間を0にすると、Projectは内部的に「このタスクはマイルストーンである」というフラグを立てます。APIを直接叩くのではなく、属性を変えることでProjectエンジンに自動計算させるのが、最も安全で賢いやり方です。

3. 初心者が陥りやすい「3つの罠」

VBAを触り始めると、必ず以下の壁にぶつかります。先回りして対策を教えますね。

  • 罠1:オブジェクトがない(Nothingエラー)
  • Projectには「名前のない空行」が存在することがあります。`If Not tsk Is Nothing Then` というチェックを忘れないでください。これだけでエラーの9割は防げます。
  • 罠2:サマリータスクを壊してしまう
  • 前述の通り、親タスクの期間を操作するとプロジェクトの構造が崩れます。必ず `tsk.Summary` で判定を入れましょう。
  • 罠3:マクロの記録を過信しない
  • Excelとは異なり、Projectの「マクロの記録」は非常に貧弱です。記録したコードをそのまま使おうとせず、上記のようにオブジェクトモデルを直接操作する書き方を身につけてください。

4. さあ、次のステップへ

今回のスクリプトをマスターすれば、「特定のキーワードを含むタスクだけをマイルストーンにする」「特定のフラグが立っているタスクだけを一括変更する」といった応用がすぐに見えてくるはずです。

Project VBAは、単なる自動化ツールではありません。あなたの「プロジェクト管理という名のルーチンワーク」を、思考するための時間に置き換えるための武器です。

まずはこのコードを動かし、一瞬でタスクが菱形(マイルストーン)に変わる快感を味わってください。それが、伝説的な自動化エンジニアへの第一歩です。

何かうまくいかないことがあれば、いつでも聞いてください。応援していますよ!

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