【入門編】【アスペクト比維持のサイズ統一】`PageSetup` をハックし、異なるスライドサイズや余白設定を持つ複数プレゼンを標準フォーマットへ一括変換するコンバーター – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!今日も業務自動化の旅を一歩進めていきましょう。

「過去に作った4:3の資料と、新しい16:9の資料を1つにまとめたいけれど、コピー&ペーストしたら図形や画像が横にびよーんと伸びて潰れてしまった……」
「何十個もある企画書のサイズを、手作業で1つずつワイドサイズに変更していくのが苦痛で仕方がない……」

あなたも、こんな悩みに直面したことはありませんか?

PowerPointのサイズ変更は、手作業で行うとレイアウトが崩れたり、画像のアスペクト比(縦横比)が歪んでしまったりと、実は非常に神経を使う面倒な作業です。

そこで今回は、PowerPoint VBAの力を使って、「異なるサイズや余白設定を持つ複数のプレゼンテーションファイルを、アスペクト比を綺麗に保ったまま、指定した標準サイズ(16:9など)へ一括で変換する極上コンバーター」を一緒に作っていきましょう。

マクロの記録を卒業し、PowerPointのオブジェクトモデル(構造)を深く理解する絶好のチャンスです。「ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ」と胸を張って言えるよう、優しく、かつプロの現場で役立つ本質的な知見を込めて解説します。

準備はいいですか? それでは、出発しましょう!

1. PowerPointの「骨組み」を理解しよう(オブジェクトモデル)

コードを書く前に、まずはPowerPoint VBAがどのようにスライドを操作しているのか、その「骨組み(オブジェクトモデル)」を整理しておきましょう。ここを理解しておくと、コードの丸暗記から脱却できます。

PowerPointの構造は、以下のような「階層構造(親子関係)」になっています。

Application (PowerPoint全体)
└── Presentations (開いているプレゼンテーションの集まり)
└── Presentation (特定の1つのファイル)
├── PageSetup (スライドのサイズや向きの設定) ★今回の主役!
└── Slides (スライドの集まり)
└── Slide (個々のスライド)

Excel VBAを触ったことがある方なら、「`Workbook` が `Presentation` に、`Worksheet` が `Slide` に対応している」と考えるとイメージしやすいでしょう。

今回の主役は、`Presentation` オブジェクトの配下にある `PageSetup` オブジェクトです。
この `PageSetup` が、スライドの横幅(`SlideWidth`)、高さ(`SlideHeight`)、そしてサイズ変更時の挙動をすべて司っています。ここをハックすることで、スライドのサイズを自由自在に操れるようになるのです。

2. 単純変換の罠と「アスペクト比維持」の設計

「サイズを変えるだけなら、`PageSetup.SlideWidth = 960` のように数値を書き換えるだけでいいのでは?」と思うかもしれません。

しかし、ここに大きな罠があります。
単にサイズ(数値)だけを書き換えると、中にある画像や図形が「新しいサイズに合わせて横や縦に引き伸ばされ、歪んでしまう」のです。丸い円が楕円になってしまったり、人物の顔が横長になってしまったりする悲劇は、これが原因です。

これを防ぐために、PowerPoint 2013以降ではサイズ変更時に「最大化(コンテンツを拡大・縮小)」するか「サイズに合わせて調整(コンテンツを歪めずに収める)」するかを制御する賢い仕組みが用意されています。

VBAでは、`Presentation.SlideSizeToFit` メソッドや、`PageSetup` のプロパティを適切に設定することで、「アスペクト比を維持したまま、中身の歪みを最小限に抑えてフィットさせる」というインテリジェントな変換が可能になります。

今回は、実務で最もよく使われる「さまざまなサイズ(4:3や独自サイズ)のファイルを、一瞬で美しい 16:9(ワイド画面) に統一するコンバーター」を作ります。

3. 【完全版】一括サイズ変換コンバーター(VBAコード)

それでは、具体的なコードを見てみましょう。
このコードは、指定したフォルダ内にあるすべてのPowerPointファイル(`.pptx`, `.ppt`)を自動で開き、アスペクト比を最適に維持しながら「16:9(標準ワイドサイズ)」に変換し、別フォルダに保存する実戦用のプログラムです。

新規のPowerPointファイルを開き、`Alt + F11` キーを押してVBAエディタを開き、標準モジュールを挿入して以下のコードを貼り付けてみてください。

Option Explicit

”’

”’ 異なるサイズのスライドファイルを、アスペクト比を維持しながら16:9に一括変換します。
”’

Public Sub ConvertPresentationSizeTo16x9()
Dim targetFolderPath As String
Dim outputFolderPath As String
Dim fileName As String
Dim currentPres As Presentation
Dim fileCount As Long

‘ 1. 処理対象のフォルダを選択(ダイアログを表示)
MsgBox “変換したいPowerPointファイルが保存されている【入力フォルダ】を選択してください。”, vbInformation, “手順 1/2”
targetFolderPath = SelectFolderDialog(“変換元フォルダの選択”)
If targetFolderPath = “” Then
MsgBox “処理をキャンセルしました。”, vbExclamation
Exit Sub
End If

‘ 2. 保存先のフォルダを選択
MsgBox “変換後のファイルを保存する【出力先フォルダ】を選択してください。” & vbCrLf & _
“※元のファイルを上書きしないよう、別のフォルダを推奨します。”, vbInformation, “手順 2/2”
outputFolderPath = SelectFolderDialog(“保存先フォルダの選択”)
If outputFolderPath = “” Then
MsgBox “処理をキャンセルしました。”, vbExclamation
Exit Sub
End If

‘ 末尾のパス区切り文字を調整
If Right(targetFolderPath, 1) <> “\” Then targetFolderPath = targetFolderPath & “\”
If Right(outputFolderPath, 1) <> “\” Then outputFolderPath = outputFolderPath & “\”

‘ 3. フォルダ内のPowerPointファイルを検索
fileName = Dir(targetFolderPath & “.pp”) ‘ .ppt や .pptx を対象にする
fileCount = 0

‘ 画面のちらつきを抑え、高速化するための準備
‘ ※PowerPointには Excelの ScreenUpdating = False がありません。
‘ 代わりに、プレゼンテーションを「非表示(WithWindow:=msoFalse)」で開くことで劇的に高速化します!

Do While fileName <> “”
On Error Resume Next
‘ ファイルを画面に表示せずに(バックグラウンドで)開く
Set currentPres = Presentations.Open(FileName:=targetFolderPath & fileName, _
ReadOnly:=msoFalse, _
Untitled:=msoFalse, _
WithWindow:=msoFalse)
On Error GoTo 0

If Not currentPres Is Nothing Then
‘ — [ここが本質のハック!] —
‘ アスペクト比を維持したリサイズ処理
ResizePresentationKeepAspect currentPres
‘ —————————–

‘ 変換後のファイルとして保存(別名で上書きを防止)
On Error Resume Next
currentPres.SaveAs FileName:=outputFolderPath & “Converted_” & fileName
currentPres.Close
On Error GoTo 0

fileCount = fileCount + 1
End If

‘ 次のファイルを検索
fileName = Dir()
Loop

‘ 4. 完了報告
If fileCount > 0 Then
MsgBox “お疲れ様でした!” & vbCrLf & _
“合計 ” & fileCount & ” 個のファイルを 16:9 に変換して保存しました。” & vbCrLf & _
“保存先: ” & outputFolderPath, vbInformation, “変換完了”
Else
MsgBox “対象となるPowerPointファイルが見つかりませんでした。”, vbExclamation, “終了”
End If
End Sub

”’

”’ プレゼンテーションのサイズをアスペクト比を維持しつつ16:9(ワイド)に変更します。
”’

Private Sub ResizePresentationKeepAspect(ByRef pres As Presentation)
With pres
‘ PowerPoint 2013以降で推奨される、安全なサイズ変更プロセスです。

‘ 1. スライドサイズの種類を「ワイド画面 (16:9)」に明示的に設定します。
‘ これにより、PowerPointの標準16:9(幅10インチ / 高さ5.625インチ、またはシステム標準)に設定されます。
.PageSetup.SlideSize = ppSlideSizeOnScreen16x9

‘ 2. [重要] コンテンツをスライドサイズに「綺麗にフィット」させるためのメソッドを実行します。
‘ これを呼び出すことで、中の画像や図形が歪む(縦横比が崩れる)のを防ぎます。
‘ 引数:msoTrue = サイズに合わせて調整(はみ出さないように縮小)
.SlideSizeToFit msoTrue
End With
End Sub

”’

”’ フォルダ選択ダイアログを表示するヘルパー関数
”’

Private Function SelectFolderDialog(ByVal title As String) As String
Dim shellApp As Object
Dim folder As Object

Set shellApp = CreateObject(“Shell.Application”)
‘ 16,384 = BIF_USENEWUI (新しいフォルダ選択フォルダUIを使用)
Set folder = shellApp.BrowseForFolder(0, title, &H4000, 0)

If Not folder Is Nothing Then
SelectFolderDialog = folder.Self.Path
Else
SelectFolderDialog = “”
End If
End Function

4. プロの設計思想:ここがポイント!

このコードには、初学者の皆さんにぜひ知ってほしい「プロが実務で使うための工夫」がちりばめられています。いくつか重要なポイントを解説しますね。

① `WithWindow:=msoFalse` で超高速化&ストレスフリー!

Excel VBAでは `Application.ScreenUpdating = False` を使って画面描画を止め、処理を高速化しますよね。しかし、実はPowerPoint VBAにはこのプロパティがありません。

ではどうするか?
プロは、ファイルを「非表示」のまま裏側で開いて処理します。それが、`Presentations.Open` の引数にある `WithWindow:=msoFalse` です。
これを指定するだけで、画面がチカチカ動くことなく、恐ろしいほどのスピードで処理が完了します。 ユーザーにとっても非常にスマートでストレスフリーな体験になります。

② `PageSetup.SlideSize` と `SlideSizeToFit` の黄金コンビ

単にサイズを数値で書き換えるのではなく、あらかじめ用意されている定数 `ppSlideSizeOnScreen16x9` を指定しています。これによって、PowerPointが標準とする美しい16:9の比率に一発で設定できます。

そして最も大切なのが、`.SlideSizeToFit msoTrue` です。
この1行を実行することで、PowerPointに対して「中身のコンテンツを新しいスライドサイズに綺麗に収めてね!」と指示を出せます。これにより、図形が横に潰れるといったレイアウト崩れを最小限に防ぐことができるのです。

5. 初学者が陥りがちな罠とステップアップ対策

このマクロを使えば基本的には綺麗に変換されますが、PowerPointの「気まぐれな仕様」による罠がいくつか存在します。あらかじめ知っておくと、トラブルの際に慌てずに済みますよ。

罠1:フォントサイズが勝手に小さくなってしまう

スライドのサイズを小さくする(あるいは縦横比の変更に伴って縮小される)際、PowerPointの親切心が裏目に出て、テキストボックス内のフォントサイズが自動的に縮小されてしまうことがあります。
これを完全に防ぐには、スライド内のテキストプレースホルダーの「自動収縮設定」をVBAで1つずつオフにする必要があります。

もし「どうしても文字サイズが変わってほしくない!」という場合は、変換後に各スライドのテキストボックスをループして調整するコードを追加しますが、まずは今回のコードで「全体のサイズをアスペクト比を維持して変える」という基本動作をマスターしてくださいね。

罠2:マスタースライドのレイアウト崩れ

スライドのサイズを変更すると、「スライドマスター(背景のデザインやロゴの配置ルール)」も一緒にリサイズされます。
もし元のファイルが非常に古いフォーマット(独自の4:3など)で、マスターに直に画像を貼り付けてある場合、その画像だけが少し歪んでしまうことがあります。
一括変換を行った後は、念のためいくつかのスライドを開いて、レイアウトが崩れていないかサッと目視で確認する習慣をつけると完璧です。

まとめ:ここをクリアすれば、PowerPoint VBAの基本はバッチリ!

お疲れ様でした!
今回は `PageSetup` をハックし、異なるサイズのスライドを美しい16:9へと一括変換する本格的なツールを作成しました。

今回のポイントを振り返ってみましょう。

1. 階層構造を意識する:`Application` -> `Presentation` -> `PageSetup` の繋がり。
2. 歪みを防ぐ:定数設定と `SlideSizeToFit` を使ってアスペクト比を賢く守る。
3. 裏側で処理する:`WithWindow:=msoFalse` を使って、画面を表示させずに一瞬で処理を終わらせる。

これが理解できれば、PowerPoint VBAの基礎体力は十分に身についています。マクロの記録で作る「ただ動くだけのコード」から、「ユーザーの使いやすさと安全性を考慮したプロレベルのコード」への大きな一歩を踏み出せましたね。

このツールを使って、日々の面倒な「スライドサイズ調整」から自分もチームのメンバーも解放してあげてください。

あなたの業務効率化がさらに進むことを応援しています。分からないことがあれば、いつでもまた聞きに来てくださいね!

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