こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押して得られるコードを眺める段階は、もう卒業しましたね。今日私たちが挑むのは、PowerPointの心臓部を直接叩き、プレゼンテーションを丸ごと最高品質のMP4動画へと昇華させる「CreateVideoメソッド」の完全制御です。
「手動でスライドショーを録画して、書き出して……なんてやってられない!」
「複数ファイルの動画化を完全自動化したい!」
そんな現場の叫びをスマートに解決する、プロフェッショナルなVBAの極意を授けましょう。ここをクリアすれば、あなたのPowerPoint VBAのスキルは間違いなく一段上のステージに到達します。さあ、深くまで潜っていきましょう。
—
1. なぜ「CreateVideo」なのか?(基本思想とアーキテクチャ)
PowerPointには、スライドを動画化する機能が標準搭載されています。しかし、GUI(画面操作)で行うと、解像度やフレームレートの設定ミス、長時間の書き出し中のフリーズなど、実務ではストレスが溜まります。
ここで登場するのが、Presentationオブジェクトが持つ `CreateVideo` メソッド です。
このメソッドの真価は、「バックグラウンドでレンダリングを完全に制御できる点」にあります。
解像度、各スライドの秒数、フレームレート、そして書き出し完了の待機(同期処理)まで、すべてをコードの掌(てのひら)で操ることができます。
まずは、今回私たちが構築する「4K/フルHD動画一括エクスポートエンジン」の全貌をお見せしましょう。
—
2. 実装コード:プロフェッショナル・ビデオエクスポーター
以下のコードを、VBAエディタ(`Alt + F11`)の標準モジュールに貼り付けてください。実務でそのまま使えるよう、エラーハンドリングと非同期処理の待機ロジックを組み込んでいます。
Option Explicit
‘ ==============================================================================
‘ 担当:シニア・アーキテクト
‘ 概要:アクティブなプレゼンテーションを指定解像度のMP4動画として書き出す
‘ ==============================================================================
Public Sub ExportPresentationToVideo()
Dim targetPres As Presentation
Set targetPres = ActivePresentation
‘ 1. 出力ファイルパスの生成(同名で拡張子を .mp4 に変更)
Dim outputPath As String
outputPath = GetOutputFilePath(targetPres, “mp4”)
If outputPath = “” Then Exit Sub ‘ キャンセルされた場合
‘ 2. 動画化パラメータの設定
Const USE_DEFAULT_TIMINGS As Boolean = False ‘ 手動タイミングを使用するか
Const SLIDE_DURATION As Long = 5 ‘ 各スライドの表示秒数(デフォルト)
Const FRAMES_PER_SECOND As Long = 30 ‘ フレームレート
Const QUALITY_WIDTH As Long = 3840 ‘ 解像度:幅(3840=4K, 1920=FullHD)
‘ 3. エクスポート実行前の確認ログ
Debug.Print “— 動画書き出し開始 —”
Debug.Print “出力先: ” & outputPath
Debug.Print “解像度: ” & QUALITY_WIDTH & “px幅”
On Error GoTo ErrorHandler
‘ 4. CreateVideoメソッドの呼び出し
‘ ※注意:この処理は非同期(バックグラウンド実行)で始まります
targetPres.CreateVideo FileName:=outputPath, _
UseTimingsAndNarrations:=USE_DEFAULT_TIMINGS, _
DefaultSlideDuration:=SLIDE_DURATION, _
VertResolution:=QUALITY_WIDTH, _
FramesPerSecond:=FRAMES_PER_SECOND
‘ 5. 書き出し完了の完全同期(これがないとファイルが空のままマクロが終了します)
Call WaitForVideoCreation(targetPres)
MsgBox “動画の書き出しが正常に完了しました!” & vbCrLf & outputPath, vbInformation, “完了”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
Debug.Print “Error: ” & Err.Number & ” – ” & Err.Description
End Sub
‘ ==============================================================================
‘ 補助関数:出力パスの自動生成
‘ ==============================================================================
Private Function GetOutputFilePath(pres As Presentation, ext As String) As String
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ プレゼンテーションが未保存の場合はデスクトップをデフォルトにする
Dim basePath As String
If pres.Path = “” Then
basePath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\Presentation”
Else
basePath = fso.BuildPath(pres.Path, fso.GetBaseName(pres.Name))
End If
GetOutputFilePath = basePath & “.” & ext
End Function
‘ ==============================================================================
‘ 補助サブルーチン:動画生成の完了を監視する同期ループ
‘ ==============================================================================
Private Sub WaitForVideoCreation(pres As Presentation)
Dim isCreating As Boolean
isCreating = True
‘ ステータスバーに進捗を表示しながらループ
Do While isCreating
DoEvents ‘ UIのフリーズを防ぎ、OSに処理権を渡す
On Error Resume Next
isCreating = pres.CreateVideoStatus = ppMediaTaskStatusInProgress
On Error GoTo 0
If isCreating Then
Application.StatusBar = “動画をレンダリング中…”
‘ 1秒待機(CPU負荷軽減)
Application.Wait Now + TimeValue(“00:00:01”)
End If
Loop
Application.StatusBar = “”
End Sub
—
3. コードの急所:ここが分かれば怖くない!
初心者から中級者へステップアップする上で、このコードの重要なポイントを3つ解説します。
① `CreateVideo` の引数を支配する
メソッドの引数は強力ですが、一歩間違えると意図しない動画になります。
- `UseTimingsAndNarrations`: `False` にすると、次の引数 `DefaultSlideDuration` で指定した秒数(例: 5秒)がすべてのスライドに均等に適用されます。アニメーションのタイミングを完全にコントロールしたい場合は `True` にし、各スライドの「画面切り替え」タブで秒数を事前に設定しておきます。
- `VertResolution`: ここには「縦方向の解像度(高さ)」ではなく、実はPowerPointの仕様上、「水平方向の幅(Vertではなく実際には幅を指定する設計になっています)」または縦のピクセル数を指定します。4Kなら `3840`、フルHDなら `1920` を指定します。
② 最大の罠「非同期処理(Async)」への対策
ここが本日のハイライトです。
`CreateVideo` メソッドは、呼び出した瞬間にバックグラウンドで動画のエンコードを開始します。つまり、VBAのコード自体は動画の完成を待たずに次の行へ進んでしまうのです。
もし `WaitForVideoCreation` による監視ループを入れないと、「マクロは終わったのに、ファイルを開いたら0バイトの壊れた動画だった」という悲劇が起きます。
③ `DoEvents` と CPU負荷の調律
監視ループ内で使用している `DoEvents` は、PowerPointが「応答なし」になるのを防ぐ魔法の呪文です。さらに `Application.Wait` を挟むことで、PCのファンが爆音で回り続けるのを防ぎ、優しく安全にレンダリングの完了を待ちます。
—
4. 現場でありがちなトラブルシューティング
- Q. 「ファイルを作成できませんでした」と怒られます。
- A. すでに同じ名前の動画ファイルが再生中(プレビュー画面が開いているなど)で、上書き保存がロックされている可能性があります。出力先のファイル名をタイムスタンプ付きにするなどの工夫を加えましょう。
- Q. 書き出しにやたら時間がかかります。
- A. 4K (`3840`) 出力は非常に重い処理です。スライド内に高解像度の画像や複雑な形状(シェイプ)が大量にあると、レンダリングに時間がかかります。まずはフルHD (`1920`) でテストすることをお勧めします。
—
おわりに:自動化の先にある未来へ
お疲れ様でした!今回は、PowerPoint VBAを使った「CreateVideoによる高品質動画の一括エクスポート」の深層を解説しました。
この技術を応用すれば、例えば「フォルダ内にある数百個のパワポファイルを、夜間にすべて自動で4K動画に変換し、YouTube用の素材としてストックする」といったモンスター級の自動化システムすら構築可能です。
ここをクリアしたあなたなら、もうPowerPointは単なる「スライド作成ツール」ではなく、「プログラムから自在に操るマルチメディア・エンジン」に見えているはずです。
ぜひ、日々の業務やクリエイティブな現場でこの知見を役立ててください。それでは、次の自動化の旅でお会いしましょう!
