こんにちは。プロジェクトマネジメントの現場で、日々「手作業の限界」と戦っているあなたへ。
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の深い森を切り拓くその一歩を、私は全力でサポートしますよ。
それでは、また次回の講義でお会いしましょう!
