【入門編】【中級者】スライドの「セクション」情報をもとに、セクションごとの表紙スライドを自動生成し、セクション単位で個別のPPTXに分割保存するスマート分割マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは。業務自動化の世界へようこそ。
マクロの記録ボタンを押して生成される「冗長で壊れやすいコード」から卒業し、プレゼンテーションを自在に操るエンジニアへの第一歩を踏み出しましょう。

今回は、大規模な資料作成現場で必ず遭遇する「セクション単位のファイル分割」という課題を、VBAのオブジェクトモデルを駆使してスマートに解決します。

—

なぜ「セクション分割」を自動化するのか?

大規模なプレゼン資料を管理していると、「特定のセクションだけを顧客に送りたい」「分担して編集したい」という要求が必ず発生します。手作業でコピペを繰り返すと、レイアウトの崩れや誤削除というヒューマンエラーが必ず起きます。

今回目指すのは、「セクション情報を読み取り、そのセクションのタイトルを刻印した表紙スライドを先頭に差し込み、別ファイルとして保存する」という、極めて実用的な自動化です。

—

開発の前に:PowerPointオブジェクトの「階層構造」を理解する

PowerPoint VBAを掌握する鍵は、この階層をイメージすることです。

1. Application: PowerPointそのもの
2. Presentation: 開いているファイル
3. Slides: スライドの集合体
4. SectionProperties: セクション情報(ここが今回の肝!)

セクションは `Presentation.SectionProperties` に格納されています。ここをループで回すことで、資料の構造をプログラムに認識させます。

—

実装コード:セクション単位のスマート分割マクロ

以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてください。

Option Explicit

‘ 伝説のアーキテクトが贈る、セクション分割自動化コード
Sub SplitPresentationBySections()
Dim pptApp As Application
Dim sourcePres As Presentation
Dim newPres As Presentation
Dim i As Integer, j As Integer
Dim secName As String
Dim slideCount As Integer
Dim sectionSlideIndex As Integer

Set sourcePres = ActivePresentation

‘ セクションを一つずつ処理する
For i = 1 To sourcePres.SectionProperties.Count
secName = sourcePres.SectionProperties.Name(i)

‘ 1. 新規プレゼンテーション作成
Set newPres = Presentations.Add

‘ 2. セクション内のスライドをコピーして追加
‘ セクションの開始インデックスを取得
sectionSlideIndex = sourcePres.SectionProperties.FirstSlide(i)
slideCount = sourcePres.SectionProperties.SlidesInSection(i)

sourcePres.Slides.Range(ArrayRange(sectionSlideIndex, slideCount)).Copy
newPres.Slides.Paste

‘ 3. 表紙スライドを先頭に追加してタイトルを刻印
Call AddCoverSlide(newPres, secName)

‘ 4. 保存(デスクトップに保存)
newPres.SaveAs Environ(“USERPROFILE”) & “\Desktop\” & secName & “.pptx”
newPres.Close
Next i

MsgBox “分割完了しました!”, vbInformation
End Sub

‘ 範囲指定のための補助関数
Function ArrayRange(startIdx As Integer, count As Integer) As Long()
Dim arr() As Long, k As Integer
ReDim arr(0 To count – 1)
For k = 0 To count – 1
arr(k) = startIdx + k
Next k
ArrayRange = arr
End Function

‘ 表紙追加のサブルーチン
Sub AddCoverSlide(pres As Presentation, title As String)
Dim sld As Slide
Set sld = pres.Slides.Add(1, ppLayoutTitle)
sld.Shapes(1).TextFrame.TextRange.Text = title
sld.Shapes(2).TextFrame.TextRange.Text = “自動生成資料 – ” & Date
End Sub

—

現場で役立つ「極限の知見」:ここが落とし穴!

1. `Slides.Range` は配列を要求する

PowerPoint VBAで最も躓きやすいのが `Slides.Range` メソッドです。単なる数字の羅列では受け取らず、`Array()` 関数で包んだ配列を渡す必要があります。上記の `ArrayRange` 関数のように、動的に配列を生成するロジックを組むのがプロの作法です。

2. セクションのインデックス管理

`SectionProperties.FirstSlide` は、そのセクションの「最初のスライド番号」を返します。この番号を起点に、そのセクションに含まれるスライド枚数を足し合わせることで、範囲を特定します。ループ処理を行う際は、「スライド番号がずれていないか」を常に意識してください。

3. オブジェクトの解放を怠らない

今回はシンプルな処理なので省略しましたが、複雑なシステムを組む際は `Set newPres = Nothing` を必ず行いましょう。メモリリークを防ぐことは、大規模資料を扱うエンジニアの嗜みです。

—

最後に:自動化は「愛」です

「毎回手作業で5分かかる作業」を自動化すれば、年間で数時間の余裕が生まれます。その時間で、あなたはよりクリエイティブな企画を考えたり、大切な人と過ごしたりできる。VBAによる自動化とは、自分と周囲の時間を守るための愛ある技術なのです。

「ここが動かない」「もっとこうしたい」という壁にぶつかったら、それはあなたが成長している証です。恐れずにコードを書き換え、自分だけの最強のツールへと昇華させてください。

次はどの自動化を攻略しますか?あなたの挑戦を応援しています!

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