【入門編】【中級者】ファイル共有サーバーへの負荷を軽減するため、PPTX内の高解像度画像を適正サイズ(例:150DPI)に自動ダウンサンプル処理してから軽量保存するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
日々、大量のプレゼンテーション資料を扱っていると、こんな壁にぶつかりませんか?

「写真をたくさん貼り付けたら、ファイルサイズが50MBを超えてしまった……」
「ファイル共有サーバーの容量を圧迫するし、メール添付エラーで送信できない!」
「画質はそこそこでいいから、とにかくスリムに軽くしたい!」

マクロの記録ボタンを押すだけでは絶対にたどり着けない、「VBAによる画像の高効率ダウンサンプル(軽量化)とスマート保存」のテクニックを伝授します。

ここをクリアすれば、あなたも単なる「VBAの利用者」から「業務自動化のアーキテクト」へ一歩踏み出せますよ。温かく丁寧に解説していきますので、一緒にマスターしていきましょう!

—

なぜPowerPointのファイルは重くなるのか?(本質を理解する)

まず、敵を知ることから始めましょう。PowerPoint(PPTX)のファイル実体は、実は「ZIP形式で圧縮されたファイルの集まり」です。その容量の9割以上を占めている犯人が、「高解像度な画像の原データ」です。

ユーザーがスマホや一眼レフで撮影した4000ピクセル超の画像をそのままスライドに貼り付け、見栄えを整えるために縮小して配置したとします。この時、PowerPointの内部には「見えているサイズは小さいのに、中身は4000ピクセルの巨大なデータ」が丸ごと保存されています。

これが、無駄なファイル肥大化のメカニズムです。これをVBAで適切なサイズ(例えば印刷や画面共有に十分な150DPI程度)に自動圧縮し、サクッと保存できたら……日々のストレスが一気に解消されますよね。

—

現場で使える!自動ダウンサンプル&軽量保存マクロ

お待たせしました。こちらが実務でそのまま使える完全版のVBAコードです。
PowerPointの「開発」タブからVisual Basic Editorを開き、標準モジュールに貼り付けて実行してみてください。

Option Explicit

Sub OptimizeAndSavePresentation()
Dim targetPath As String
Dim originalSize As Double
Dim optimizedSize As Double

‘ 1. アクティブなプレゼンテーションが保存されているかチェック
If ActivePresentation.Path = “” Then
MsgBox “一度ファイルを保存してから実行してください。”, vbExclamation, “処理中断”
Exit Sub
End If

‘ 2. 実行前のファイルサイズを取得(MB換算)
originalSize = FileLen(ActivePresentation.FullName) / (1024 1024)

On Error GoTo ErrorHandler

‘ 3. 【核心】PowerPointのネイティブ機能を使った画像圧縮の実行
‘ 第1引数: 0 = 全ての画像を対象 (Falseにすると選択中の画像のみ)
‘ 第2引数: 0 = Web/Eメール用(約150ppi)、1 = 画面用(約96ppi)、2 = 印刷用(約220ppi)等
‘ ※PowerPointのバージョンや仕様により定数値が異なる場合があります
ActivePresentation.CompressPictures Intensity:=0

‘ 4. 上書き保存の実行
ActivePresentation.Save

‘ 5. 実行後のファイルサイズを取得
optimizedSize = FileLen(ActivePresentation.FullName) / (1024 1024)

‘ 6. 完了メッセージ(どれくらい軽くなったかを表示)
MsgBox “画像の最適化と保存が完了しました!” & vbCrLf & _
“———————————-” & vbCrLf & _
“修正前: ” & Format(originalSize, “0.00”) & ” MB” & vbCrLf & _
“修正後: ” & Format(optimizedSize, “0.00”) & ” MB” & vbCrLf & _
“削減率: ” & Format((originalSize – optimizedSize) / originalSize 100, “0.0%”) & ” 軽くなりました!”, _
vbInformation, “最適化完了”

Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub

—

コードの解説:ここがエンジニアのこだわりポイント!

初心者の方でも納得できるよう、コードの重要なポイントを3つに分解して解説します。

1. 未保存チェック (`ActivePresentation.Path = “”`)

VBAでファイルを扱う際、まだ一度も名前を付けて保存していない新規ドキュメント(「プレゼンテーション1」など)の状態だと、ファイルパスが取得できずエラーになります。これを事前に弾くことで、マクロの暴走を防ぐ「安全装置」の役割を果たします。

2. ファイルサイズの計測 (`FileLen` 関数)

VBAの `FileLen関数` を使うことで、指定したファイルのバイト数を取得できます。これを `1024 1024` で割ることで、人間がパッと見て分かりやすい「メガバイト(MB)」に変換しています。軽量化の前後の数値を比較してメッセージで出すことで、「自動化の効果を可視化する」のがプロの心遣いです。

3. 本丸の処理 (`ActivePresentation.CompressPictures`)

これが今回のテーマのキモです。わざわざ1枚ずつ画像をループしてリサイズするような面倒で重い処理を書く必要はありません。PowerPointが標準で持っている画像圧縮の司令塔(メソッド)をVBAから呼び出すことで、一瞬で全スライドの高解像度画像を適正サイズにダウンサンプルしてくれます。

—

陥りやすい罠とエラー回避の知恵袋

実務でこのマクロを運用する際、いくつか知っておくべき注意点(トラップ)があります。ここをクリアすれば完璧です。

  • 「すでに低解像度な画像」はこれ以上圧縮されません

すでに適切なサイズにトリミング・圧縮されている画像に対して実行しても、画質がさらに劣化することは基本的にありません(ファイルサイズも劇的には変わりません)。あくまで「巨大な生データが眠っているファイル」に絶大な効果を発揮します。

  • 上書き保存される点に注意

上記のコードは `ActivePresentation.Save` で上書き保存します。「元の高解像度版も残しておきたい!」という場合は、実行前にあらかじめ別名でコピー(バックアップ)を取るか、`ActivePresentation.SaveAs` を使って別名保存するようコードをカスタマイズしてください。

—

おわりに:ここをクリアすれば、PowerPoint VBAの基本はバッチリです!

お疲れ様でした!今回は「画像のダウンサンプルと軽量保存」という、実務で今すぐ役立つテーマを解説しました。

「ただ動くコードをコピペする」だけでなく、「ファイルの構造を理解し、安全装置を仕込み、効果を可視化する」というエンジニアとしての視点を持てたなら、あなたのスキルはもう中級者の領域に達しています。

このマクロをベースに、フォルダ内の全パワーポイントファイルを一括処理するバッチプログラムに発展させることも可能です。ぜひ、あなたの日常業務の自動化に役立ててくださいね。

それでは、次のステップでお会いしましょう!Happy Coding!

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