こんにちは!プロジェクト管理の現場で、日々MS Projectのガントチャートと格闘お疲れ様です。
「マクロの記録」ボタンを押してみたものの、中身はなんだかよく分からないコードばかり……。そんなモヤモヤを抱えていませんか?
大丈夫、安心してください。今回は、Project VBAの真髄である「オブジェクトモデルの操作」と、実務で間違いなく重宝する「ビューのグループ化自動化」をテーマに、一気にステップアップしていきましょう。
ここをクリアすれば、あなたも立派なProject VBAの書き手です。さあ、一緒に極限の効率化の世界へ足を踏み入れましょう!
—
なぜ「グループ化の自動化」が必要なのか?
皆さんは、プロジェクトの定例会議の前日にこんな作業をしていないでしょうか?
1. 「今週のタスクを、担当者(リソース)ごとにまとめたい」
2. 「いや、やっぱり上層部向けに、部署ごとのコスト集計ビューに変えよう」
3. 手動で「表示」タブを開き、グループ化の設定をポチポチ……。
これを毎回の会議前や、ステークホルダーが変わるたびに手動で行うのは、エンジニアの仕事ではありません。VBAに一瞬でやらせましょう。
Project VBAには、ビューの表示形式やグループ化を意のままに操るための強力なメソッドが備わっています。それが今回主役として登場する `GroupApply` メソッド です。
—
押さえておくべきProject VBAの基本構造
コードを書く前に、MS Projectのオブジェクト階層の「お作法」を少しだけ頭に入れておきましょう。Excel VBAと似ていますが、Projectには独特の「重み」があります。
Application (アプリ全体)
└─ ActiveProject (いま開いているプロジェクト)
└─ ActiveWindow (いま見ている画面)
└─ View / Table / Group (見た目やグループ化の設定)
私たちが操作したい「グループ化」は、「今見ている画面(ActiveWindow)」に対して指示を出します。「リソース別」「部署別」といったグループ定義(Group)を、現在のビューに適用(Apply)する、という流れになります。
—
実践!グループ化を自動化するマクロコード
それでは、実務でそのままコピペして使える完全版のコードを公開します。
VBE(Visual Basic Editor)を開き、標準モジュールに貼り付けてみてください。
‘ ==============================================================================
‘ 処理名 : 部署別・リソース別ビュー自動切り替えツール
‘ 概要 : MS Projectのタスクビューを指定したグループ定義で瞬時に再編成します。
‘ 開発者 : チーフアーキテクトからのエール
‘ ==============================================================================
Sub ApplyCustomGrouping()
Dim targetGroupName As String
Dim response As VbMsgBoxResult
‘ 1. ユーザーにどのグループ化を行いたいか選択させる
response = MsgBox(“「リソース別」にグループ化しますか?” & vbCrLf & _
“([はい] = リソース別 / [いいえ] = 部署別 / [キャンセル] = 中止)”, _
vbYesNoCancel + vbQuestion, “ビュー自動化ツール”)
If response = vbCancel Then
MsgBox “処理を中止しました。”, vbInformation
Exit Sub
End If
‘ 2. 選択に応じてグループ名を変数に格納
If response = vbYes Then
targetGroupName = “Resource” ‘ ※MS Projectのデフォルト、または独自定義のグループ名
Else
targetGroupName = “Department” ‘ ※事前に定義したカスタムグループ名想定
End If
‘ 3. エラーハンドリングの準備(存在しないグループを指定した時の対策)
On Error GoTo ErrorHandler
‘ 4. ガントチャートビューに切り替え、かつグループ化を適用
‘ ※Project VBAの肝:ActiveWindowに対してGroupApplyを実行します
ViewApply Name:=”Gantt Chart”
‘ 引数:Name(グループ名), Clear(既存のグループをクリアするか),
‘ ShowInMenu(メニューに表示するか等)
GroupApply Name:=targetGroupName, Clear:=True
‘ 5. 成功メッセージ
MsgBox “ビューを「” & targetGroupName & “」に切り替えました!会議資料の準備はバッチリです。”, vbInformation, “完了”
Exit Sub
ErrorHandler:
‘ 陥りやすいエラーの優しく丁寧なケア
MsgBox “指定されたグループ「 ” & targetGroupName & ” 」が見つかりませんでした。” & vbCrLf & _
“プロジェクト内に同名のグループが定義されているか確認してください。”, vbCritical, “エラー発生”
End Sub
—
コードの注目ポイントと「陥りやすい罠」
上記のコードには、実務で必ず直面する「落とし穴」を防ぐための工夫が詰まっています。
1. 「マクロの記録」の呪縛からの脱却
マクロの記録を使うと、コードが画面の裏側の細かい選択状態まですべて記録するため、非常に長く、かつ壊れやすいコードになります。
しかし、私たちが書いた上記のコードは、「目的のビューを開く (ViewApply)」 $\rightarrow$ 「グループを適用する (GroupApply)」 という本質的な2行(+UI制御)だけにスリム化されています。これがプロのコードです。
2. `On Error GoTo` による安全網
Project VBAで最も多いエラーは、「指定した名前のグループやビューが存在しない」というヒューマンエラーです。
Excelと違い、MS Projectはプロジェクトファイル(mpp)ごとに独自のグループ定義を持つことができます。そのため、別のファイルでこのマクロを走らせたときに「そんなグループないよ!」と怒られて強制終了してしまいます。
エラーハンドラを仕込んでおくことで、ツールとしての「優しさ(堅牢性)」が劇的に向上します。
—
さらに現場を自動化するためのヒント
このコードをベースに、さらに実務をハックするアイデアをいくつかお伝えします。
- リボンやクイックアクセスツールバーへの登録:
このマクロをクイックアクセスツールバーに登録しておけば、ワンクリックで「リソース別」「部署別」の会議用資料ビューが完成します。
- PDF出力の自動化:
`GroupApply` の直後に `FilePrint` やPDF出力のコマンドを繋げれば、「ボタン1つで、全リソース別の工程表PDFが生成されてデスクトップに保存される」という究極の自動化フローが完成します。
—
最後に
お疲れ様でした!ここまで読み進めたあなたなら、もう単なる「マクロの記録の実行者」ではありません。Projectのオブジェクトモデルを理解し、現場の課題をコードで解決する「オートメーション・エンジニア」の第一歩を踏み出しています。
「ここをこう変えたいんだけど、どう書けばいい?」といった疑問が出てきたら、いつでもまたこの扉を叩いてください。
あなたのProjectライフが、極限まで快適でスマートなものになることを応援しています!
