記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

PowerPointで画像を作っているだけど、地味に手間なんだよな…
というように感じている方はいらっしゃらないでしょうか?
当ブログでは
- SEO対策の一つとしてオリジナルな画像を利用した方が良いと聞いたことがある
- 読者もそこまでじっくり段落を読まない
ということを踏まえ、
記事の見出しのすぐ下に挟む画像もなるべく、その段落のまとめを画像にするようにしています。

こんな感じです

ただ、このような画像を作るのは地味に手間なんです。

新しいスライドにコピーして、テキストボックスの文言を変えて、JPEGで出力して…
ひとつひとつはそれほど大きな作業では無いのですが、枚数が重なると地味に手間だと感じるように…。
これらの手間を省くために、PowerPointにVBAを搭載してマクロで処理時間を短縮させたいと思い、ChatGPT×PowerPointで爆速で画像を作る方法を考えました。
この記事では、完成した2つのマクロを紹介します!
ChatGPTに狙い通りの回答をもらうためのプロンプトの参考になれば嬉しいです!
ぜひ最後までお読みください!
▶︎こちらの記事ではChatGPTを使ってWebアプリケーションを作成した話を紹介しています。

目次
もともとは
- 新しいスライドを作る
- 前回作ったスライドをコピーする
- 新しいスライドのテキストボックスの中の文言を修正する
- 作成したスライドをJPEG形式でエクスポートする
- ファイルサイズが大きければリサイズする
といったことを行なっていました。早ければ2〜3分で終わりますが、ときには5分ほどかかったり…段落ごとに作っていると気持ち的には負担が増えてきますよね。
そこで
- テンプレートに指定したスライドのコピーを作成しテキストボックスの文言を変えられるマクロ
- 完成したスライドをJPEG画像として出力できるようにするマクロ
この2つを作成しようと考えました。

VBA作成にあたってはChatGPTを大いに活用しました!
1つ目のマクロは「テンプレートに指定したスライドのコピーを作成しテキストボックスの文言を変えられるマクロ」です。
早速、作っていきました。


以下の要件を満たすテンプレートを作成するvbaのコードを教えてください。【要件】・いますでに作成されている任意のスライドをテンプレートとする。 ・そのテンプレートを利用して新規スライドを作成する際、そのスライド内にあるテキストボックスの文言だけ編集できるようにしたい

以下は、任意の既存のスライドをテンプレートとして利用し、新規スライドを作成する際にそのスライド内のテキストボックスの文言だけを編集できるVBAのコードです。
Sub CreateCustomSlideFromTemplate()
Dim templateSlide As Slide
Dim newSlide As Slide
Dim shp As Shape
Dim editedText As String
Dim i As Integer
' テンプレートとして利用するスライドを選択
On Error Resume Next
Set templateSlide = Application.ActiveWindow.View.Slide
On Error GoTo 0
If templateSlide Is Nothing Then
MsgBox "テンプレートとするスライドを選択してください。", vbExclamation
Exit Sub
End If
' 新規スライドを作成
Set newSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, templateSlide.Layout)
' テンプレートのスライドからテキストボックスをコピーして新規スライドに追加し、その後テキストを編集
For i = 1 To templateSlide.Shapes.Count
If templateSlide.Shapes(i).Type = msoTextBox Then
templateSlide.Shapes(i).Copy
newSlide.Shapes.Paste
Set shp = newSlide.Shapes(newSlide.Shapes.Count)
editedText = InputBox("テキストを編集してください:", "テキスト編集", shp.TextFrame.TextRange.Text)
shp.TextFrame.TextRange.Text = editedText
End If
Next i
' 新規スライドが選択されるようにする
newSlide.Select
End Sub
ここからいくつか修正し、狙い通りの挙動を実行できるマクロを作成することができました。
マクロを実行すると

指定されたスライドがまずコピーされ、編集したいテキストメッセージを入力するインプットボックスが現れます。
インプットボックスを入力すると

新しいテキストボックスの文言に修正されました。

テンプレートに指定した方は「進路選択:進路選択」、新しいスライドでは「進路選択:大学選び」になっていますよね
ここまでに辿る過程はこちらの記事にまとめていますので、ぜひプロンプトのやりとりの参考にしてみてください。

- フォーマットが決まっているのでテンプレートとして指定
- 新しいスライドのテキストボックスの文言だけを変更すれば完成となるようにする
この流れを
さきほどのマクロで瞬時にスライドを作成することができました。
次はそのスライドをJPEG形式で出力するマクロです。


以下の要件満たすvbaで作成してください。 ・いま編集しているスライドのみをjpgで出力する。 ・保存先は選べるようにする。 ・なるべく出力するファイルのサイズは100KB以下にする。

以下のVBAコードは、現在編集中のスライドのみをJPEG形式で出力し、保存先を選択できるようにし、出力するファイルのサイズを100KB以下に制限します。
Sub ExportSlideAsJPEG()
Dim sld As Slide
Dim shp As Shape
Dim filePath As Variant
Dim quality As Long
Dim tempWidth As Long
Dim tempHeight As Long
Const ppSaveAsJPEG As Long = 17 ' JPEGのファイル形式を表す定数
' 現在のスライドを取得
Set sld = ActiveWindow.View.Slide
' ファイル名を入力するポップアップを表示
Dim fileName As String
fileName = InputBox("ファイル名を入力してください。", "ファイル名入力", sld.Name)
' 入力がキャンセルされた場合は処理を終了
If fileName = "" Then
Exit Sub
End If
' 拡張子が.jpgでない場合は追加
If LCase(Right(fileName, 4)) <> ".jpg" Then
fileName = fileName & ".jpg"
End If
' 保存先のパスを作成
filePath = ActivePresentation.Path & "\" & fileName
' JPEG画像の品質を設定(0から100の範囲、0が最低品質)
quality = 85
' 一時的にスライドのサイズを調整する(サムネイル用)
tempWidth = sld.Parent.PageSetup.SlideWidth
tempHeight = sld.Parent.PageSetup.SlideHeight
' スライドのコンテンツをコピー
sld.Copy
' 新しい一時的なプレゼンテーションを作成
Dim tempPresentation As Presentation
Set tempPresentation = Presentations.Add
' 貼り付け
tempPresentation.Slides.Paste
' スライドの画像をJPEGで保存
tempPresentation.SaveAs filePath, ppSaveAsJPEG
tempPresentation.Slides(1).Export fileName, "JPG", quality
' 一時的なプレゼンテーションを閉じる
tempPresentation.Close
' メッセージボックスで出力完了を通知
MsgBox "スライドがJPEGファイルとして保存されました。", vbInformation
' スライドのサイズを元に戻す
sld.Parent.PageSetup.SlideWidth = tempWidth
sld.Parent.PageSetup.SlideHeight = tempHeight
End Sub
※このコードでは保存先を選択することはできません。パワーポイントの保存場所に画像が出力されることになります。
このマクロを実行すると

と、スライドのファイル名を変更した上で瞬時に保存することができました。
ここまでに辿る過程はこちらの記事にまとめていますので、ぜひプロンプトのやりとりの参考にしてみてください。

PowerPointに2つのマクロを搭載して、爆速で作成したスライドを画像として出力できるようになりました。
画像1枚あたりの短縮時間は1分〜2分程度かもしれませんが、今後もこの作業が続けば、30枚作ればおよそ1時間の短縮ですからね。
ChatGPTを活用して業務効率化をこれからも図りたいと思います!
最後まで読んでいただきありがとうございました。
この記事が少しでも参考になれば幸いです。
それではまたここで会いましょう!

ブログ村に参加中です。上のバナーをクリックいただくだけで当ブログにポイントが入ります。いつも応援クリックありがとうございます。
Twitter やってます。
新着記事のお知らせをしていますのでぜひフォローしてください!スポンサーリンク