【入門編】ExcelのWBSリストからProjectタスクを一括生成する基本テンプレート – Project VBA解析バイブル

スポンサーリンク

こんにちは!プロジェクト管理の現場で、ExcelとMS Projectを行き来しながら「あぁ、この何百行もあるWBSの階層化を自動でやってくれたらなぁ……」と遠い目をしたことはありませんか?

マクロの記録のボタンを押してみたものの、Project VBAの世界はExcel VBAとは空気が少し違っていて、戸惑った方も多いはずです。でも、大丈夫。ここをクリアすれば、Project VBAの基本はバッチリですよ。

今日は、Excelのインデント(階層構造)を美しく読み取り、Project側のタスク階層(OutlineLevel)へと一気通貫で流し込む、実戦的な基本テンプレートをあなたにお届けします。

1. なぜExcelからProjectへの取り込みでつまずくのか?

実務でよくあるのが、ExcelのWBSを「コピペ」でProjectに持っていくアプローチです。これ、一見うまくいきそうですが、タスクの親子関係(WBSの階層)が崩れたり、データ型のエラーで夜を徹した手直しが必要になったりしますよね。

Excelの行データをProjectへ「正しく」流し込むためには、以下の3つのステップをVBAに教え込む必要があります。

1. Excelの表(Range)を安全にメモリ上にキャプチャする
2. Project側に空っぽのタスクを順次生成する
3. Excel側のインデントやタスク名から「階層(OutlineLevel)」を計算し、親子関係を構築する

この仕組みさえ手に入れてしまえば、どれほど巨大なWBSであっても、コーヒーを一口飲んでいる間に自動構築が完了します。

2. 実装の全体像:極限まで洗練された自動化テンプレート

今回は、Excel側の「A列:タスク名」「B列:インデントレベル(または階層の深さ)」というシンプルな構造を想定し、それをProject側へ流し込むVBAコードを用意しました。

このコードは、Excel側のVBAエディタ(またはProject側のVBAエディタからExcelを参照する形)のどちらでも動作しますが、今回はProject側からExcelファイルをダイアログで指定して読み込む、最も堅牢な設計(アーキテクチャ)で記述しています。

‘ ==============================================================================
‘ 処理名 : ExcelのWBSリストからProjectタスクを一括生成する基本テンプレート
‘ 概要 : 指定したExcelファイルからタスク名と階層構造を読み込み、
‘ Project側にOutlineLevelを正しく設定して一括展開します。
‘ ==============================================================================
Sub ImportWBSFromExcel()
Dim xlApp As Object
Dim xlWb As Object
Dim xlWs As Object
Dim filePath As Variant
Dim lastRow As Long
Dim i As Long

Dim tsk As Task
Dim taskName As String
Dim indentLvl As Long

On Error GoTo ErrorHandler

‘ 1. 読み込むExcelファイルをユーザーに選択させる
filePath = Application.GetOpenFilename( _
FileFilter:=”Excelファイル (.xlsx; .xls), .xlsx; .xls”, _
Title:=”インポートするWBSのExcelファイルを選択してください”

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