【入門編】依存関係の「ラグタイム」を一括調整する実務ツール – Project VBA解析バイブル

スポンサーリンク

こんにちは。プロジェクトマネジメントの現場で、日々「手作業の限界」と戦っているあなたへ。

Microsoft Projectの画面で、何百行もあるタスクの「先行タスク」を一つずつ開き、ラグタイム(余裕期間)をポチポチと修正した経験はありませんか? あの作業は、プロジェクトの規模が大きくなればなるほど、人為的ミスの温床となり、あなたの貴重な思考時間を奪っていきます。

今日は、Project VBAの神髄である「オブジェクトモデルの操作」を使い、「全タスクの依存関係(FSリンク)から、ラグタイムを一括で制御する」ための最強のツールを伝授します。

これは単なるコードの提供ではありません。プロジェクトの「時間軸」をプログラムで支配するための第一歩です。

1. Project VBAの「心臓部」を理解する

ProjectのVBAで最も重要なのは、「Task(タスク)にはTaskLinks(リンク)というコレクションが紐付いている」という構造を理解することです。

  • Taskオブジェクト: プロジェクトの個々のタスク。
  • TaskLinksコレクション: そのタスクが持っている「他のタスクとの依存関係」の集合体。
  • TaskLinkオブジェクト: 実際のリンク(FS, SS, FF, SFなど)。ここに「Lag(ラグタイム)」というプロパティが存在します。

「マクロの記録」では絶対に到達できない領域ですが、ここさえ押さえれば、あなたはProjectという巨大なデータベースの支配者になれます。

2. 【実戦コード】ラグタイム一括調整ツール

以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてください。このコードは、全てのタスクを巡回し、FS(終了-開始)リンクを見つけ出し、指定した日数にラグを統一するものです。

Sub BatchUpdateLagTime()
‘ 変数の宣言
Dim tsk As Task
Dim link As TaskLink
Dim targetLag As Long

‘ ここで設定したいラグタイム(分単位)を入力
‘ Projectの内部データは「分」で保持されています(例: 1日は480分)
targetLag = 480 0 ‘ 今回は「0」にリセットする場合

‘ プロジェクト内の全タスクをループ処理
For Each tsk In ActiveProject.Tasks
If Not tsk Is Nothing Then
‘ そのタスクが持っているリンクを全てチェック
For Each link In tsk.TaskLinks
‘ リンクタイプがFS(終了-開始)の場合のみ処理
‘ pjFinishToStart = 0
If link.LinkType = pjFinishToStart Then

‘ ここでラグタイムを書き換える
link.Lag = targetLag

End If
Next link
End If
Next tsk

MsgBox “全タスクのFSリンクのラグタイムを調整しました。”, vbInformation
End Sub

このコードの「本質」

  • `tsk Is Nothing` のチェック: Projectのタスクリストには、削除された行や空行が「Nothing」として存在することがあります。これを見落とすと即座にエラー(実行時エラー91)で落ちます。ここは熟練のエンジニアが必ず通る関門です。
  • 分単位の管理: Projectの内部的なラグ計算は「分」です。1日を調整したい場合は `480`(標準的な8時間労働)を掛けるのが鉄則です。

3. 陥りやすい罠:エラーを回避するために

初心者が必ずぶつかる壁が2つあります。ここをクリアすれば、あなたは中級者への切符を手に入れたも同然です。

① 「読み取り専用」のリンクに注意

ベースラインが引かれたプロジェクトや、外部ファイルとのリンクがある場合、コードが弾かれることがあります。エラーハンドリングとして `On Error Resume Next` を活用するか、事前にプロジェクトの状態を確認する習慣をつけましょう。

② 処理の重さ

数千行のプロジェクトでこのマクロを走らせると、画面が固まることがあります。必要であれば、冒頭に `Application.ScreenUpdating = False` を記述し、最後に `True` に戻すことで、計算速度を劇的に向上させられます。

4. さあ、次のステージへ

このツールは、単なる「ラグの修正」以上の意味を持ちます。
「依存関係をプログラムで制御できる」ということは、「工数の変動に合わせて、プロジェクト全体のクリティカルパスを自動で再計算・最適化できる」という可能性に繋がるからです。

もしあなたが「ラグを統一するだけでなく、タスクの重要度に応じてラグを自動配分したい」と考え始めたら、それはあなたが真のプロジェクトアーキテクトに成長した証拠です。

分からないことがあれば、いつでも聞いてください。Projectの深い森を切り拓くその一歩を、私は全力でサポートしますよ。

それでは、また次回の講義でお会いしましょう!

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