【入門編】【中級者】横向き(16:9)と縦向き(A4)のスライドが混在するプレゼンテーションを検知し、向きごとに別々のPDFへ分割・保存する制御マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは。現場の最前線で自動化アーキテクチャを設計しているエンジニアです。

「資料のレイアウトがバラバラで、PDF変換するたびに手作業で分割している」……そんな非効率な時間に別れを告げる時が来ました。

PowerPoint VBAを極める第一歩は、「オブジェクトの特性を理解し、プログラムに論理的な判断基準を与えること」です。今回は、混在するスライドサイズを自動検知し、向きごとにPDFを切り分けるという、実務で即戦力となる自動化コードを授けます。

—

なぜ、手作業をやめるべきなのか?

PowerPointにおいて、スライドの向き(横向きか、A4縦か)は`PageSetup`オブジェクトに格納されています。しかし、PowerPointの仕様上、1つのプレゼンテーションファイル内でスライドごとに「向き」を混在させることはできません。

「じゃあどうやって混在させているのか?」
多くの現場では、「横向きのプレゼンに、縦向きのPDF(あるいは画像)を貼り付けている」という力技が使われています。このコードは、その「スライドのサイズ比率」を監視し、判別・抽出するロジックを組みます。

—

現場で使える自動化コード:SplitPDFByOrientation

このコードを標準モジュールに貼り付けてください。コードの肝は、`Slide.Master`のサイズを取得し、幅と高さの比率から「横向きか縦向きか」を判定する点です。

Option Explicit

‘ ———————————————————
‘ プレゼンテーションをスライドの向き(比率)で分割しPDF出力する
‘ ———————————————————
Sub SplitPDFByOrientation()
Dim pptApp As Object
Dim targetPres As Presentation
Dim slideObj As Slide
Dim outputPath As String

‘ 出力先フォルダ(デスクトップを指定)
outputPath = Environ(“USERPROFILE”) & “\Desktop\Output_” & Format(Now, “hhmmss”) & “\”
MkDir outputPath

Set targetPres = ActivePresentation

‘ 一時的にスライドをコピーして別ファイルとして保存するための準備
Dim newPresLandscape As Presentation
Dim newPresPortrait As Presentation

‘ ここでは単純化のため、PDF名を分けて保存するロジックを提示します
‘ 実際には新しいプレゼンテーションを作成し、そこにスライドをコピーして保存するのが最も安全です

Dim sld As Slide
For Each sld In targetPres.Slides
‘ 判定ロジック:幅が高さより大きければ「横向き」とみなす
If sld.Master.Width > sld.Master.Height Then
Call ExportToPDF(sld, outputPath & “Landscape_Slide_” & sld.SlideIndex & “.pdf”)
Else
Call ExportToPDF(sld, outputPath & “Portrait_Slide_” & sld.SlideIndex & “.pdf”)
End If
Next sld

MsgBox “PDFへの分割出力が完了しました!”, vbInformation
End Sub

‘ PDF出力専用のサブプロシージャ
Private Sub ExportToPDF(ByVal sld As Slide, ByVal filePath As String)
‘ 指定したスライドのみをPDFとしてエクスポート
‘ 0は全てのスライドを出力するフラグではないため、範囲指定を利用します
sld.Export filePath, ppFixedFormatTypePDF, , , , , , , , , , , , , , , , True
End Sub

—

コードを読み解くポイント

このコードには、エンジニアとして押さえておくべき「3つの壁」をクリアする知恵が詰まっています。

1. 比率判定のロジック

`sld.Master.Width > sld.Master.Height`
PowerPointの内部単位はポイントです。単純に幅が高さより大きければ「横」、そうでなければ「縦」と判定します。この論理構造さえ理解していれば、A4以外の特殊サイズ(名刺サイズやバナーサイズ)への応用も簡単です。

2. Exportメソッドの活用

VBAにおいて「印刷」は最もエラーが起きやすい箇所です。`Export`メソッドを使うことで、余計なダイアログを出さずに、静かに、そして高速にファイル生成が可能です。

3. オブジェクトのライフサイクル

このコードでは、`targetPres`として現在のファイルを参照していますが、大規模な処理を行う場合は、必ず`Set obj = Nothing`でメモリを解放する癖をつけてください。これが「重いマクロ」を「軽いマクロ」に変えるプロの習慣です。

—

陥りやすい罠:エラーを避けるために

  • パスの権限: `MkDir`(フォルダ作成)を行う際、デスクトップに同名フォルダがあるとエラーになります。実務では `If Dir(outputPath, vbDirectory) = “” Then MkDir outputPath` といったチェックを入れるのが定石です。
  • PDF変換の遅延: スライド数が多い場合、`Export`はCPUを激しく消費します。処理中は`Application.ScreenUpdating = False`を併用して、描画を止めることで速度が劇的に向上します。

—

最後に:ここをクリアすれば、あなたはもう中級者です

「マクロの記録」で生成されるコードは、いわば「指示通りに動くロボット」です。しかし、今回のように「条件によって処理を分岐させる(If文)」、「特定のオブジェクトを抽出する(For Each文)」という技術を手に入れたあなたは、もう「自分の業務を自分で設計するエンジニア」です。

まずはこのコードをコピーして、ご自身の環境で試してみてください。エラーが出たら、それはPCからの「ここが足りないよ」というサインです。そのサインを読み解く力こそが、最強の自動化エンジニアへの近道です。

応援しています。何か詰まったら、いつでもまた聞きに来てくださいね。

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