【初心者必見】背景画像にサヨナラ!スライドマスターを綺麗にして、自分だけのテンプレートをVBAで作成しよう
皆さん、こんにちは!PowerPoint VBAの世界へようこそ。
「マクロの記録」は便利だけど、もっと自由に、もっとパワフルにPowerPointを使いこなしたい!そう思っていませんか?
今回は、そんなあなたのための記事です。
大量のプレゼンテーションファイルに散りばめられた、ちょっと派手すぎる背景画像や、目障りなウォーターマーク。これらを一つ一つ手作業で削除するのは、時間も手間もかかりますよね。
そこで、今回は 「スライドマスターの背景画像を全スライドで一括解除し、シンプルな新規テンプレートとして再保存する」 という、とてつもなく実用的なマクロを作成してみましょう。
このマクロをマスターすれば、あなたの手元には、無駄な装飾のない、クリーンで使いやすいオリジナルのテンプレートが完成します。まるで、真っ白なキャンバスに絵を描くような感覚で、あなたのアイデアを存分に表現できるようになりますよ。
「VBAなんて初めて…」という方も、どうぞご安心ください。一つ一つのコードの意味を、まるで友達に話すかのように、優しく丁寧に解説していきます。
この解説を読み終える頃には、PowerPoint VBAの基本的な考え方が身につき、「なるほど、そういうことだったのか!」と、目からウロコが落ちる体験ができるはずです。
さあ、一緒にPowerPoint VBAの扉を開けて、あなたのPowerPoint作業を劇的に効率化していきましょう!
—
なぜ「スライドマスター」の背景画像を消すのか?
まず、なぜ「スライドマスター」の背景画像を操作することが重要なのか、その理由からお話しさせてください。
PowerPointのスライドマスターは、プレゼンテーション全体のデザインやレイアウトを定義する、いわば「親玉」のような存在です。ここに設定された背景画像は、そのマスターを基に作られた全てのレイアウト、そしてそのレイアウトが適用されている全てのスライドに自動的に反映されます。

スライドマスターに設定された背景は、子スライドにも自動で適用されます。
つまり、スライドマスターの背景画像を解除すれば、そのマスターを使用している全てのスライドから、一括で背景画像が消えるというわけです。これは、手作業では到底追いつけない、圧倒的な効率化に繋がります。
「でも、個別のスライドで背景画像を設定している場合もあるのでは?」と思われるかもしれません。ご安心ください。今回のマクロは、主に「スライドマスター」に設定された背景画像に焦点を当てます。個別のスライドに設定された背景画像も操作することは可能ですが、まずは基本となる「スライドマスター」のクリアから始めるのが、後々の混乱を防ぐためにも賢明なアプローチです。
—
マクロ作成の前に:VBAエディタを開こう
マクロを作成するには、まず「VBAエディタ」という、プログラムを書くための専用の画面を開く必要があります。
1. PowerPointを開く: まず、PowerPointを起動します。
2. 「開発」タブを表示: もし「開発」タブが表示されていない場合は、以下の手順で表示させてください。
- PowerPointの「ファイル」タブをクリックします。
- 「オプション」を選択します。
- 「リボンのユーザー設定」をクリックします。
- 右側の「メインタブ」一覧から、「開発」にチェックを入れて「OK」をクリックします。

3. VBAエディタを開く: 「開発」タブが表示されたら、左側にある「Visual Basic」ボタンをクリックします。これで、VBAエディタが開きます。

VBAエディタが開いたら、左側の「プロジェクト」ウィンドウに、現在開いているPowerPointファイルが表示されているはずです。今回は、この中に新しいコードを記述していきます。
—
いよいよ本番! VBAコードを書いてみよう
ここからが本番です。背景画像を削除し、新しいテンプレートとして保存するVBAコードを書いていきましょう。
1. 新しい標準モジュールの挿入
VBAエディタの「プロジェクト」ウィンドウで、開いているPowerPointファイル(通常は `VBAProject (プレゼンテーション名)` のような名前)を右クリックします。
表示されたメニューから「挿入」→「標準モジュール」を選択してください。

これにより、右側の大きなコード入力エリアに、新しい「Module1」(または `Module2` など、連番になります)という名前のモジュールが作成され、コードを書く準備が整います。
2. VBAコードの記述
以下のコードを、先ほど作成した標準モジュールにコピー&ペーストしてください。
‘==============================================================================
‘ Sub: ClearMasterBackgroundAndSaveAsTemplate
‘ 説明: 現在開いているプレゼンテーションのスライドマスターの背景画像を削除し、
‘ シンプルな新規テンプレートとして保存するマクロ。
‘ 処理概要:
‘ 1. 全てのマスターレイアウトをループ処理する。
‘ 2. 各レイアウトの背景設定を確認し、画像があれば削除する。
‘ 3. 変更されたプレゼンテーションを、新しいPPTXテンプレートファイルとして保存する。
‘==============================================================================
Sub ClearMasterBackgroundAndSaveAsTemplate()
Dim pptPres As Presentation
Dim pptLayout As CustomLayout
Dim pptMaster As Master
Dim slideIndex As Integer
‘ 現在アクティブなプレゼンテーションを取得
On Error Resume Next ‘ エラーが発生しても処理を続行する設定
Set pptPres = ActivePresentation
On Error GoTo 0 ‘ エラーハンドリングを通常に戻す
‘ プレゼンテーションが開かれているか確認
If pptPres Is Nothing Then
MsgBox “対象となるプレゼンテーションが開かれていません。”, vbExclamation
Exit Sub
End If
‘ ユーザーに確認を求める (誤操作防止のため)
If MsgBox(“現在開いているプレゼンテーションのスライドマスター背景画像を削除し、” & _
“新しいテンプレートとして保存します。よろしいですか?”, vbYesNo + vbQuestion, “確認”) = vbNo Then
MsgBox “処理をキャンセルしました。”, vbInformation
Exit Sub
End If
‘==============================================================================
‘ スライドマスターの背景画像を削除する処理
‘==============================================================================
‘ プレゼンテーション内の全てのマスター(通常は1つ)をループ
For Each pptMaster In pptPres.SlideMasters
‘ 各マスターに含まれる全てのレイアウトをループ
For Each pptLayout In pptMaster.CustomLayouts
‘ レイアウトの背景設定を確認
‘ pptLayout.FollowMasterBackground = msoFalse の場合、
‘ 個別に背景が設定されている可能性がある。
‘ ここでは、マスター背景画像と、個別に設定された背景画像を
‘ 両方クリアすることを試みる。
‘ レイアウトの背景設定(FillFormat)をリセット
‘ これにより、マスターから継承された背景や、
‘ 個別に設定された背景(画像、単色、グラデーションなど)がクリアされる。
With pptLayout.Background.Fill
.Visible = msoFalse ‘ 背景自体を非表示にする (画像削除に繋がる)
‘ 必要であれば、より積極的に画像を削除するためのコードを追加することも可能ですが、
‘ .Visible = msoFalse が多くの場合で背景画像を効果的に削除します。
‘ 参考: pptLayout.Shapes.Range(Array(1)).Delete など、特定形状を削除する方法もあるが、
‘ 背景画像はFillFormatで管理されることが多い。
End With
‘ レイアウトがマスター背景に従う設定になっている場合、
‘ マスターの背景画像もクリアされているはず。
‘ もし、個別に背景が設定されていた場合(FollowMasterBackground = msoFalse)、
‘ その設定もクリアされているか確認・調整が必要になる場合がある。
‘ 今回は、シンプルに背景設定をリセットするアプローチを採用。
Next pptLayout
Next pptMaster
‘==============================================================================
‘ 変更されたプレゼンテーションをテンプレートとして保存する処理
‘==============================================================================
Dim savePath As String
Dim fileName As String
Dim filePath As String
‘ 保存先フォルダの選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = “テンプレートの保存先フォルダを選択してください”
.AllowMultiSelect = False
If .Show <> -1 Then ‘ ユーザーがキャンセルした場合
MsgBox “保存処理をキャンセルしました。”, vbInformation
Exit Sub
End If
savePath = .SelectedItems(1) ‘ 選択されたフォルダパスを取得
End With
‘ ファイル名の設定 (例: “CleanTemplate.potx”)
fileName = “CleanTemplate_” & Format(Now, “yyyymmdd_hhmmss”) & “.potx” ‘ 日時を付けてユニークに
filePath = savePath & “\” & fileName
‘ PPTXテンプレート形式 (.potx) で保存
‘ テンプレート形式で保存することで、開くときに常に新規作成状態になる
On Error Resume Next ‘ 保存時のエラーを捕捉
pptPres.SaveAs fileName:=filePath, FileFormat:=ppSaveAsTemplate
If Err.Number <> 0 Then
MsgBox “ファイルの保存中にエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical
Err.Clear
Else
MsgBox “背景画像が削除されたテンプレートが、以下のパスに保存されました:” & vbCrLf & filePath, vbInformation
End If
On Error GoTo 0 ‘ エラーハンドリングを通常に戻す
‘ オブジェクト変数を解放
Set pptLayout = Nothing
Set pptMaster = Nothing
Set pptPres = Nothing
End Sub
3. コードの意味を理解しよう
さあ、このコードが何をやっているのか、一つずつ見ていきましょう。
‘==============================================================================
‘ Sub: ClearMasterBackgroundAndSaveAsTemplate
‘ 説明: 現在開いているプレゼンテーションのスライドマスターの背景画像を削除し、
‘ シンプルな新規テンプレートとして保存するマクロ。
‘ … (省略) …
‘==============================================================================
Sub ClearMasterBackgroundAndSaveAsTemplate()
これは、マクロの開始を宣言しています。`Sub` は「サブルーチン」の略で、一連の処理のまとまりを表します。`ClearMasterBackgroundAndSaveAsTemplate` がこのマクロの名前です。コメント(`’` で始まる行)は、コードの説明なので、プログラムの実行には影響しません。
Dim pptPres As Presentation
Dim pptLayout As CustomLayout
Dim pptMaster As Master
Dim slideIndex As Integer
これは「変数」の宣言です。プログラムの中で、一時的にデータを保持するための箱のようなものです。
- `pptPres`:PowerPointのプレゼンテーション本体を指すための変数。
- `pptLayout`:スライドマスター内の個々のレイアウト(「タイトルスライド」、「タイトルとコンテンツ」など)を指すための変数。
- `pptMaster`:プレゼンテーション全体のマスター(通常は1つ)を指すための変数。
- `slideIndex`:スライドを数えるときに使う変数(今回は直接は使いませんが、よく使うので慣れておくと便利です)。
‘ 現在アクティブなプレゼンテーションを取得
On Error Resume Next ‘ エラーが発生しても処理を続行する設定
Set pptPres = ActivePresentation
On Error GoTo 0 ‘ エラーハンドリングを通常に戻す
`ActivePresentation` は、今あなたが操作しているPowerPointのファイルそのものを指します。`Set` は、オブジェクト(ここではプレゼンテーション)を変数に代入するときに使います。
`On Error Resume Next` と `On Error GoTo 0` は「エラーハンドリング」というもので、もしアクティブなプレゼンテーションがない場合(例えば、PowerPointが開いていない状態など)にエラーでマクロが止まってしまうのを防いでいます。
‘ プレゼンテーションが開かれているか確認
If pptPres Is Nothing Then
MsgBox “対象となるプレゼンテーションが開かれていません。”, vbExclamation
Exit Sub
End If
もし `pptPres` に何も代入されていなかったら(つまり、プレゼンテーションが開かれていなかったら)、エラーメッセージを表示してマクロを終了します。`MsgBox` は、画面にメッセージを表示する関数です。`vbExclamation` は、警告アイコンを表示します。`Exit Sub` は、そのマクロの処理をここで終了させます。
‘ ユーザーに確認を求める (誤操作防止のため)
If MsgBox(“現在開いているプレゼンテーションのスライドマスター背景画像を削除し、” & _
“新しいテンプレートとして保存します。よろしいですか?”, vbYesNo + vbQuestion, “確認”) = vbNo Then
MsgBox “処理をキャンセルしました。”, vbInformation
Exit Sub
End If
いきなり処理を実行してしまうと、意図しないファイルに影響を与える可能性があります。そこで、この `MsgBox` で、ユーザーに「本当に実行しますか?」と確認を求めています。`vbYesNo` は「はい」と「いいえ」のボタンを表示し、`vbQuestion` は疑問符アイコンを表示します。もしユーザーが「いいえ」を選んだら、処理をキャンセルします。`& _` は、長い行を複数行に分けて記述するための記法です。
‘==============================================================================
‘ スライドマスターの背景画像を削除する処理
‘==============================================================================
‘ プレゼンテーション内の全てのマスター(通常は1つ)をループ
For Each pptMaster In pptPres.SlideMasters
‘ 各マスターに含まれる全てのレイアウトをループ
For Each pptLayout In pptMaster.CustomLayouts
‘ レイアウトの背景設定(FillFormat)をリセット
With pptLayout.Background.Fill
.Visible = msoFalse ‘ 背景自体を非表示にする (画像削除に繋がる)
End With
Next pptLayout
Next pptMaster
ここが、背景画像を削除する核心部分です。
- `For Each pptMaster In pptPres.SlideMasters`:プレゼンテーションには複数のマスターが含まれることがありますが、通常は1つです。このループで、そのマスターオブジェクトを一つずつ `pptMaster` という変数に取り出します。
- `For Each pptLayout In pptMaster.CustomLayouts`:取り出したマスターに含まれる、すべてのレイアウト(「タイトルスライド」、「タイトルとコンテンツ」など)を一つずつ `pptLayout` という変数に取り出します。
- `With pptLayout.Background.Fill`:`pptLayout`(レイアウト)の背景設定(`Background`)の中の、塗りつぶしの設定(`Fill`)に対して、これから一連の操作を行いますよ、という意味です。これにより、コードがスッキリします。
- `.Visible = msoFalse`:これが重要です!背景の表示を「オフ」(`msoFalse`)にすることで、画像であろうと単色であろうと、背景そのものが非表示になります。多くのケースで、これで背景画像は効果的に削除されます。
【ここがポイント!】
「背景画像」という独立したオブジェクトがあるわけではなく、多くの場合、レイアウトの「塗りつぶし」設定として画像が設定されています。そのため、この `.Visible = msoFalse` で塗りつぶし自体を非表示にすることが、画像削除の最もシンプルで効果的な方法なのです。
‘==============================================================================
‘ 変更されたプレゼンテーションをテンプレートとして保存する処理
‘==============================================================================
Dim savePath As String
Dim fileName As String
Dim filePath As String
‘ 保存先フォルダの選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = “テンプレートの保存先フォルダを選択してください”
.AllowMultiSelect = False
If .Show <> -1 Then ‘ ユーザーがキャンセルした場合
MsgBox “保存処理をキャンセルしました。”, vbInformation
Exit Sub
End If
savePath = .SelectedItems(1) ‘ 選択されたフォルダパスを取得
End With
ここからは、処理後のファイルをテンプレートとして保存する部分です。
- `Application.FileDialog(msoFileDialogFolderPicker)`:ファイル保存ダイアログではなく、「フォルダ選択ダイアログ」を表示させるための命令です。
- `.Title`:ダイアログのタイトルを設定します。
- `.AllowMultiSelect = False`:複数のフォルダを選択できないようにします。
- `If .Show <> -1 Then`:ユーザーがダイアログを表示して、「OK」ではなく「キャンセル」を押した場合、`.Show` は `-1` 以外の値を返します。その場合、処理をキャンセルします。
- `savePath = .SelectedItems(1)`:ユーザーが選択したフォルダのパスを `savePath` 変数に格納します。
‘ ファイル名の設定 (例: “CleanTemplate.potx”)
fileName = “CleanTemplate_” & Format(Now, “yyyymmdd_hhmmss”) & “.potx” ‘ 日時を付けてユニークに
filePath = savePath & “\” & fileName
保存するファイル名を決めます。今回は、`CleanTemplate_` の後に、現在の日時(年、月、日、時、分、秒)を付けて、ファイル名が重複しないようにしています。`Format(Now, “yyyymmdd_hhmmss”)` で現在の日時を「20231027_153000」のような形式の文字列に変換しています。
そして、選択されたフォルダパスとファイル名を結合して、完全な保存パス `filePath` を作成します。
‘ PPTXテンプレート形式 (.potx) で保存
‘ テンプレート形式で保存することで、開くときに常に新規作成状態になる
On Error Resume Next ‘ 保存時のエラーを捕捉
pptPres.SaveAs fileName:=filePath, FileFormat:=ppSaveAsTemplate
If Err.Number <> 0 Then
MsgBox “ファイルの保存中にエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical
Err.Clear
Else
MsgBox “背景画像が削除されたテンプレートが、以下のパスに保存されました:” & vbCrLf & filePath, vbInformation
End If
On Error GoTo 0 ‘ エラーハンドリングを通常に戻す
いよいよ保存です。
- `pptPres.SaveAs fileName:=filePath, FileFormat:=ppSaveAsTemplate`:プレゼンテーションを、指定したパス (`fileName`) に、テンプレート形式 (`FileFormat:=ppSaveAsTemplate`) で保存します。テンプレート形式で保存することで、このファイルをダブルクリックして開いたときに、常に「新規作成」の状態になり、元のテンプレートファイルは変更されないようになります。
- ここでも、保存時にエラーが発生した場合に備えて、エラーハンドリングを行っています。エラーがあれば詳細を表示し、なければ成功メッセージを表示します。
‘ オブジェクト変数を解放
Set pptLayout = Nothing
Set pptMaster = Nothing
Set pptPres = Nothing
End Sub
最後に、`Set 変数名 = Nothing` というコードで、先ほど使用した変数(オブジェクト)を解放します。これは、メモリを適切に解放し、プログラムの安定性を高めるために良い習慣です。
—
マクロの実行方法
1. VBAエディタを開く: PowerPointで「開発」タブ → 「Visual Basic」をクリックします。
2. マクロを選択: VBAエディタのメニューバーから「挿入」→「標準モジュール」でモジュールを作成し、上記のコードを貼り付けます。
3. マクロを実行: PowerPointに戻り、「開発」タブ → 「マクロ」をクリックします。
4. 表示されたマクロ一覧から `ClearMasterBackgroundAndSaveAsTemplate` を選択し、「実行」ボタンをクリックします。
5. 確認メッセージ: 実行前に確認メッセージが表示されるので、「はい」をクリックします。
6. 保存先を選択: テンプレートを保存したいフォルダを選択し、「OK」をクリックします。
これで、指定したフォルダに、背景画像が削除された新しいテンプレートファイルが作成されます!
—
陥りやすいエラーとその対処法
マクロを作成・実行していると、いくつか「あれ?うまくいかないぞ?」という状況に遭遇することがあります。ここでは、よくあるエラーとその対処法をいくつかご紹介します。
1. 「コンパイル エラー: 定数名または変数名が見つかりません」
- 原因: コードのどこかにタイプミスがある、または `_` の後に不要な文字が入っている可能性があります。特に、`vbYesNo + vbQuestion` のような部分で、`+` の前後や `vbQuestion` のスペルミスなどが考えられます。
- 対処法: エラーメッセージが表示された箇所を注意深く確認し、タイプミスがないか、記号の使い方が正しいかを見直してください。コードブロックの `_` は、行の末尾にのみ使用し、その後にスペースや他の文字を入れないように注意しましょう。
2. 「実行時エラー ‘1004’: メソッドは失敗しました。 [PowerPoint.] オブジェクトのエラーです。」
- 原因:
- アクティブなプレゼンテーションがない: PowerPoint自体は開いているが、何もプレゼンテーションファイルが開かれていない状態でマクロを実行した場合に発生しやすいです。
- 特定のマスターやレイアウトに予期せぬ設定がある: 非常に稀ですが、PowerPointの内部的な問題や、特殊なアドインの影響で、本来操作できるはずのプロパティにアクセスできない場合があります。
- 対処法:
- まず、対象となるPowerPointファイルが開かれていることを確認してください。
- それでも解決しない場合は、コードの `Set pptPres = ActivePresentation` の直後に `Debug.Print pptPres.Name` のような行を挿入して、正しくプレゼンテーションオブジェクトが取得できているか確認してみましょう。
- さらに、`pptLayout.Background.Fill` の部分でエラーが出る場合、そのレイアウトには背景画像が設定されていない(または、標準的な背景設定ではない)可能性があります。コードを修正して、`If pptLayout.Background.Fill.Visible = msoTrue Then` のような条件分岐を追加することも考えられますが、今回の目的(背景画像を削除する)においては、`.Visible = msoFalse` を実行しても何も起こらないだけで、エラーにはならないはずです。もしエラーが出る場合は、より詳細な調査が必要になることがあります。
3. 「保存先フォルダが見つかりません」または「ファイル名が長すぎます」
- 原因:
- 保存先フォルダが存在しない: ユーザーが指定したフォルダパスが間違っていたり、既に削除されていたりする場合。
- ファイル名が長すぎる、または無効な文字が含まれている: Windowsのファイル名には使用できない文字(`\` `/` `:` “ `?` `”` `<` `>` `|` など)が含まれている場合や、パスとファイル名を合わせた長さが上限を超えている場合。
- 対処法:
- 保存先フォルダが実際に存在することを確認してください。
- ファイル名の生成部分 (`fileName = …`) を確認し、必要であればよりシンプルな名前に変更するか、無効な文字が含まれていないかチェックしてください。今回のコードでは日時を付けているため、ファイル名が長すぎる可能性は低いですが、`savePath` が非常に長い場合などに発生することがあります。
4. マクロの記録から脱却できない…
- 原因: VBAのオブジェクトモデル(PowerPointがどのように構成されているか)や、プロパティ・メソッド(オブジェクトの持つ機能や設定項目)の理解が不足しているため、記録されたコードの範囲を超えた操作ができない。
- 対処法:
- オブジェクトブラウザを活用する: VBAエディタで `F2` キーを押すと「オブジェクトブラウザ」が開きます。ここで「PowerPoint」を選択し、`Presentation` や `Master`、`Layout` などのオブジェクトを選択すると、そのオブジェクトが持つプロパティやメソッドの一覧を確認できます。これは、どんな操作が可能かを知るための強力なツールです。
- ヘルプを活用する: Microsoftの公式ドキュメントや、オンラインのVBAコミュニティなどを活用し、特定のプロパティやメソッドについて調べる習慣をつけましょう。
- 実際に試してみる: 「こういうことをしたいけど、どう書けばいいんだろう?」と思ったら、まずは簡単なコードで試してみることが大切です。例えば、`Debug.Print` を使って変数の値を確認したり、一時的に `MsgBox` を挟んで処理の流れを追ったりするなど、デバッグのテクニックを身につけましょう。
—
まとめ:あなただけのテンプレート作成への第一歩
いかがでしたか?
今回は、PowerPoint VBAを使って、スライドマスターの背景画像を一括で削除し、シンプルなテンプレートとして保存するマクロを作成しました。
このマクロを理解し、実行できるようになれば、あなたはもう「マクロの記録」という魔法の杖だけに頼る存在ではありません。PowerPoint VBAという、より強力で、より自由な道具を手に入れたのです。
- スライドマスターの重要性
- VBAエディタの開き方とモジュールの挿入
- コードの各部分が何をしているのか
- よくあるエラーとその対処法
これらをクリアできれば、PowerPoint VBAの基礎はバッチリです!
ここからさらに、文字の色を変えたり、図形を追加したり、アニメーションを設定したり… あなたの創造力次第で、できることは無限に広がっていきます。
ぜひ、このコードをベースに、色々なプレゼンテーションで試してみてください。そして、不要な装飾を排した、あなただけの「クリーンなテンプレート」を、あなたの手で作り上げていきましょう。
PowerPoint VBAの世界は、まだまだ奥が深いです。これからも一緒に、このエキサイティングな旅を続けていきましょう!
それでは、また次回の記事でお会いしましょう!
