【入門編】【中級者】大量のPPTXファイルを、画質(DPI)を指定して高解像度PNG画像へ一括変換する実用ツール – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの限界を突破せよ:高解像度PNG一括変換の極意

こんにちは。自動化の世界へようこそ。
「PowerPointの『名前を付けて保存』から画像を選ぶと、なぜか画質が荒い…」
そんな壁にぶつかったことはありませんか?

実は、PowerPointの標準エクスポート機能は「96 DPI」というWeb標準の解像度に固定されています。印刷物や高精細なディスプレイ向けには力不足です。しかし、我々自動化エンジニアにとって、それは「仕様」ではなく「設定変更の対象」に過ぎません。

今回は、VBAを使ってPowerPointの解像度の限界を突破し、300DPI以上の高画質で一括エクスポートする実戦的な手法を伝授します。

—

1. なぜ「標準機能」では画質が荒れるのか?

PowerPointが画像を書き出す際、内部的にはレジストリ設定にある解像度を参照しています。VBAで単に `SaveAs` や `Export` メソッドを叩くだけでは、OSが設定したデフォルトの低い解像度で書き出されてしまうのです。

これを解決するには、VBAで一時的にレジストリの解像度設定を書き換え、エクスポート後に元に戻すという、少し「裏技」的なアプローチが最も確実で高速です。

—

2. 【実践】高解像度エクスポートツール

このコードは、指定したフォルダ内の全PPTXファイルを読み込み、300DPIの鮮明なPNG画像へ変換します。

Option Explicit

‘ レジストリ操作のためのAPI宣言
Private Declare PtrSafe Function RegSetValueEx Lib “advapi32.dll” Alias “RegSetValueExA” _
(ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

‘ 高解像度出力のためのメイン処理
Sub ExportHighResImages()
Dim pptApp As Application
Dim targetFolder As String
Dim fileName As String
Dim targetPres As Presentation
Dim exportPath As String

‘ 1. 解像度を300DPIに変更する設定(詳細は後述)
Call SetExportResolution(300)

targetFolder = “C:\Your\Target\Folder\” ‘ 対象フォルダを指定
fileName = Dir(targetFolder & “.pptx”)

Set pptApp = Application

Do While fileName <> “”
Set targetPres = Presentations.Open(targetFolder & fileName, WithWindow:=msoFalse)
exportPath = targetFolder & Left(fileName, InStrRev(fileName, “.”) – 1) & “\”

‘ フォルダがなければ作成
If Dir(exportPath, vbDirectory) = “” Then MkDir exportPath

‘ スライドをエクスポート
targetPres.Export exportPath & “Slide”, “PNG”, 1920, 1080 ‘ 任意のピクセルサイズを指定可能

targetPres.Close
fileName = Dir()
Loop

‘ 2. 設定を元に戻す(重要!)
Call SetExportResolution(96)

MsgBox “変換完了!”, vbInformation
End Sub

‘ 解像度変更のロジック(レジストリ書き換え)
Sub SetExportResolution(dpi As Long)
‘ ※注意: HKEY_CURRENT_USER\Software\Microsoft\Office\xx.x\PowerPoint\Options
‘ に「ExportBitmapResolution」というDWORD値を作成/更新する処理です。
‘ ここは実務ではWScript.ShellのRegWriteを使うのが安全です。
Dim wsh As Object
Set wsh = CreateObject(“WScript.Shell”)
wsh.RegWrite “HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\PowerPoint\Options\ExportBitmapResolution”, dpi, “REG_DWORD”
End Sub

—

3. コードの読み解きとプロの視点

なぜ `WithWindow:=msoFalse` なのか?

大量のファイルを処理する際、いちいちウィンドウを開いていてはメモリと時間を浪費します。バックグラウンドで開くことで、処理速度は数倍向上します。

レジストリを触るリスクと責任

`SetExportResolution` で行っているのは、PowerPointの「心臓部」の設定書き換えです。処理が終わった後に必ず元の「96」に戻すコードを入れるのは、システムを汚さないためのエンジニアとしてのマナーです。

陥りやすい罠:ファイル名の重複

大量変換では、ファイル名の末尾に連番をつける(Slide1.png, Slide2.png…)処理が自動で行われます。保存先フォルダをファイルごとに分ける工夫をしないと、上書き事故が発生するので注意してください。

—

4. さらなる高みを目指すあなたへ

今回のコードは、PowerPoint VBAの「オートメーション」の入り口に過ぎません。ここをクリアした後は、以下のステップへ進むことをお勧めします。

1. エラーハンドリング: `On Error Resume Next` で逃げるのではなく、ファイルが開けなかった場合にログを残す仕組みを作る。
2. 進捗表示: `Application.StatusBar` を使って、あと何ファイル残っているかを常に表示させる。
3. UIの分離: 設定(DPIやフォルダパス)をExcelシートから読み込むようにすれば、VBAのコードを一切触らずに運用できる「社内ツール」に進化します。

PowerPoint VBAは「スライドを動かすもの」ではなく、「情報を変換し、価値を再定義するもの」です。このツールをきっかけに、ぜひあなたの業務を劇的に効率化させてください。

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

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