こんにちは!PowerPointの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身のコードはちんぷんかんぷん……」という状態から抜け出し、自分の意のままにプレゼンテーションを構築できるようになりたい方に向けて、今日はとっておきの技術をお伝えします。
ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ。ぜひ最後までついてきてくださいね。
—
なぜ「セクション操作」をVBAで自動化するのか?
大規模なプレゼン資料を作るとき、PowerPointの「セクション(章分け)」機能を使っていますか?
「イントロ」「現状分析」「解決策」「まとめ」といったように、スライドをグループ分けしておくと、ファイルがすっきりと見やすくなり、発表時の移動も劇的にスムーズになります。
しかし、毎度手動で「セクションの追加」をポチポチ押し、スライドをドラッグ&ドロップして……というのは、エンジニアの美学に反しますよね。特に、外部データや別の資料からスライドをかき集めて新規プレゼンを自動生成するようなシーンでは、セクションの構築からスライドの配属までをVBAで一気通貫に自動化するのが正解です。
今回は、PowerPoint VBAにおける隠れた重要オブジェクト`SectionProperties`と、そのメソッドである`AddSection`を完全に掌握し、プロの手による動的セクション構築ロジックをあなたに伝授します。
—
1. セクション操作の全体像とオブジェクトの構造
まずは、PowerPointのオブジェクトモデルにおける「セクション」の居場所を確認しておきましょう。
PowerPointのVBAでは、階層構造が次のように決まっています。
- `Application` (PowerPoint全体)
- `Presentation` (開いているファイル)
- `Slide` (個々のスライド)
- `SectionProperties` (プレゼンテーション内のセクションを管理するプロパティ)
実は、セクションを操作するための専用オブジェクトが `SectionProperties` です。これを通じて、「ここに新しいセクションを作ってくれ」「このスライドを何番目のセクションに移動してくれ」と命令を出します。
—
2. 基礎知識:`AddSection` メソッドの正しい使い方
新しいセクションを追加するには、対象のプレゼンテーションの `SectionProperties` に対して `AddSection` メソッドを呼び出します。
基本構文
Dim newSectionIndex As Long
newSectionIndex = ActivePresentation.SectionProperties.AddSection(Index, Name)
- `Index` (Long型): 新しいセクションを挿入する位置(何番目のセクションの「前」または「後」にするか)。
- `Name` (String型): 作成するセクションの名前(例: `”01_イントロダクション”`)。
- 戻り値: 追加されたセクションのインデックス番号を返します。
※注意点として、PowerPointのセクション操作は、スライドが1枚も無い状態ではエラーになるか、予期せぬ挙動をすることがあります。必ずベースとなるスライドが存在する(または生成した直後である)状態で実行するのが鉄則です。
—
3. 実践!新規プレゼン作成&セクション自動構築マクロ
それでは、現場で即戦力として使える実用コードを見ていきましょう。
このコードは、新規にプレゼンテーションを立ち上げ、あらかじめ決められた構成(全6枚のスライド)を自動生成しつつ、内容に応じて適切なセクションに分類・配属するスクリプトです。
VBE(Visual Basic Editor)の標準モジュールに貼り付けて実行してみてください。
Sub BuildPresentationWithSections()
‘ =====================================================================
‘ チーフアーキテクト直伝:動的セクション構築&スライド配属ロジック
‘ =====================================================================
Dim targetPres As Presentation
Dim sld As Slide
Dim secProp As SectionProperties
‘ 1. 新規プレゼンテーションを作成(標準の空白レイアウト)
Set targetPres = Presentations.Add
‘ セクションプロパティへの参照を変数に保持(パフォーマンス向上と記述の簡略化)
Set secProp = targetPres.SectionProperties
‘ 2. サンプル用のスライドを6枚一気に生成する(ここではタイトルだけ設定)
‘ ※実際の業務では、ここで外部データや別ファイルを読み込みます
Set sld = targetPres.Slides.Add(1, ppLayoutTitle): sld.Shapes.Title.TextFrame.TextRange.Text = “表題: 2年度事業戦略”
Set sld = targetPres.Slides.Add(2, ppLayoutText): sld.Shapes.Title.TextFrame.TextRange.Text = “本日のアジェンダ”
Set sld = targetPres.Slides.Add(3, ppLayoutText): sld.Shapes.Title.TextFrame.TextRange.Text = “市場環境の分析”
Set sld = targetPres.Slides.Add(4, ppLayoutText): sld.Shapes.Title.TextFrame.TextRange.Text = “競合他社の動向”
Set sld = targetPres.Slides.Add(5, ppLayoutText): sld.Shapes.Title.TextFrame.TextRange.Text = “我が社の打ち手と戦略”
Set sld = targetPres.Slides.Add(6, ppLayoutText): sld.Shapes.Title.TextFrame.TextRange.Text = “まとめと質疑応答”
‘ 3. セクションの動的構築とスライドの配属
‘ 【重要】PowerPointの仕様上、新規作成時は全スライドが「既定のセクション」に属しています。
‘ まず最初のセクションの名前を変更し、必要な位置に新しいセクションを追加していきます。
‘ 最初のセクション(スライド1〜2を含む)の名前を変更
secProp.Rename 1, “01_導入”
‘ — セクション2の追加とスライドの配属 —
‘ スライド3枚目(市場環境の分析)の位置に、新しいセクション「02_現状分析」を挿入
‘ 引数: 挿入位置のスライドインデックス, セクション名
secProp.AddSection 3, “02_現状分析”
‘ — セクション3の追加とスライドの配属 —
‘ スライド5枚目(我が社の打ち手と戦略)の位置に、セクション「03_戦略提案」を挿入
secProp.AddSection 5, “03_戦略提案”
‘ 完了メッセージ
MsgBox “プレゼンテーションの生成とセクションの自動構築が完了しました!”, vbInformation, “自動化完了”
End Sub
—
4. コードの解説と「陥りやすい罠」
上記のコードで、特に初学者がハマりがちなポイントをエンジニアの視点から解説します。
① 「既定のセクション」の存在を忘れるな
新規にプレゼンを作った瞬間、PowerPointにはすでに「既定のセクション(Default Section)」という名のセクションが1つだけ存在しています。
新しいセクションを作る前に、まずはこの最初のセクションを `secProp.Rename(1, “セクション名”)` でリネームするのが、スマートにコードを書くコツです。これを忘れて新しく追加ばかりすると、意図しない空っぽのセクションが残ってしまいます。
② セクションの「追加インデックス」はスライド番号を指定する
`secProp.AddSection(Index, Name)` の第1引数(Index)には、「どのスライド番号の直前に新しいセクションを置くか」を指定します。
上記のコードで `secProp.AddSection 3, “02_現状分析”` と書いているのは、「3枚目のスライド(市場環境の分析)を、新しく作るセクションの先頭にする」という意味になります。
ここを「セクション自体の番号」と勘違いしてバグを生む人が非常に多いので、しっかりと覚えておきましょう。
—
5. さらに実用性を高めるために(発展編)
実際の現場では、スライドの枚数が固定ではなく、CSVやExcelからデータを読み込んで動的に変動するケースがほとんどでしょう。
その場合は、スライドを生成するループの中で条件分岐(`If`文や `Select Case`文)を使い、
- 「スライドのタイトルに『分析』という文字が含まれたら、自動的にそこにセクションを切る」
- 「トータルのスライド枚数を数えて、一定数を超えたら章を分割する」
といったアルゴリズムを組むことで、真に価値のある「全自動プレゼン生成エンジン」が完成します。
—
まとめ
今回は、`Presentation.SectionProperties.AddSection` を用いたセクションの自動構築と、スライドの初期配属ロジックについて解説しました。
- セクション管理は `SectionProperties` オブジェクトが握っている。
- 新規プレゼン作成時は、最初のセクションをリネームすることから始める。
- `AddSection` のインデックスは「スライド番号」を指定する。
この基本原則さえ押さえておけば、どれほど巨大なスライド群であっても、一瞬で美しく構造化されたプレゼンに仕立て上げることができます。ぜひご自身の業務マクロに応用してみてください。
あなたのVBAライフが、より知的で快適なものになりますように。次の記事もお楽しみに!
