【ChatGPT×PowerPoint】テンプレスライドをコピーしテキストボックスの内容を変えられるマクロを作った話

eyecatch46822

(記事内のリンクの一部はアフィリエイトリンクです。詳しくはプライバシーポリシー&免責事項をご覧ください)

当ブログでは、記事作成のためにパワーポイントで画像を作成し、見出しの下に段落のまとめを挟むよう心掛けています。

しかし、簡単な画像とはいえ、手間がかかることも事実。

そこで、マクロを活用して作業効率化を試みました。ChatGPTにマクロ製作を依頼し、作ったマクロの挙動がこちらです。

このようにマクロを実行するとテンプレートに指定したスライドのコピーを作成し、その中にあるテキストボックスの文言を変えて新しいスライドとして作成してくれます。

わずかな時間とはいえ、量が多くなれば大量の時間の節約になることも事実。

そこでこの記事ではchatGPTとのやりとりとプロンプトの例を記事で紹介しています。

ぜひ最後まで読んでみてください!

マクロ作成の経緯・前提

当ブログでは

  • SEO対策の一つとしてオリジナルな画像を利用した方が良いと聞いたことがある
  • 読者もそこまでじっくり段落を読まない

ということを踏まえ、

記事の見出しのすぐ下に挟む画像もなるべく、その段落のまとめを画像にするようにしています。

コトゼニ
コトゼニ

こんな感じです

eyecatch-4554-img1v2

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

コトゼニ
コトゼニ

新しいスライドにコピーして、テキストボックスの文言を変えて、JPEGで出力して…

その作業を効率化するために、

  • テンプレートに指定したスライドのコピーを作成しテキストボックスの文言を変えられるマクロ
  • 完成したスライドをJPEG画像として出力できるようにするマクロ

この2つのマクロをPowerPointに搭載しました。

▶︎スライドをJPEG出力するマクロ製作の話はこちらの記事で紹介しています。

eyecatch46772【ChatGPT×PowerPoint】スライドをJPEG出力するマクロを作った話

今回製作したマクロでは以下のような要件を満たすものにしました。

このマクロの要件・実現したいこと
  • 指定したスライドをコピー&ペーストする(テキストボックスや画像もそのままコピペ)
  • 新しいスライドにペーストされるテキストボックスはペースト前に文言を入力できるようにする

これらを満たすマクロを作れるように、ChatGPTと相談しました!

ChatGPTとのやりとり・プロンプト

実際にChatGPTにどのようなプロンプトを投げていたのかを紹介します。

指定したスライドをコピー&ペーストする・新しいスライドにペーストされるテキストボックスはペースト前に文言を入力できるようにする

早速、プロンプトを紹介します。

マクロのプロンプト(テンプレートから作成)
コトゼニ
コトゼニ

以下の要件を満たすテンプレートを作成するvbaのコードを教えてください。

【要件】

・いますでに作成されている任意のスライドをテンプレートとする。

・そのテンプレートを利用して新規スライドを作成する際、そのスライド内にあるテキストボックスの文言だけ編集できるようにしたい

chatGPT
chatGPT

以下は、任意の既存のスライドをテンプレートとして利用し、新規スライドを作成する際にそのスライド内のテキストボックスの文言だけを編集できる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
        End If
    Next i
    
    ' 新規スライドのテキストボックスの文言を編集
    For Each shp In newSlide.Shapes
        If shp.Type = msoTextBox Then
            editedText = InputBox("テキストを編集してください:", "テキスト編集", shp.TextFrame.TextRange.Text)
            shp.TextFrame.TextRange.Text = editedText
        End If
    Next shp
    
    ' 新規スライドが選択されるようにする
    newSlide.Select
End Sub

ただ、実行すると、画像がコピペされませんでした。

プロンプトが悪かったですね…

指定したスライドの画像もコピー&ペーストする

ということで再び投げかけてみました。

マクロのプロンプト(テンプレ出力)−2
コトゼニ
コトゼニ

「(ChatGPTが提示したコード)」だと、テンプレートに指定した画像などのオブジェクトがコピーされません。画像などもコピーしてコピー先に追加することはできますか

chatGPT
chatGPT

はい、テンプレートのスライドに含まれる画像や図形などのオブジェクトもコピーして新規スライドに追加することは可能です。以下の修正済みコードを参照してください:

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
        End If
    Next i
    
    ' テンプレートのスライドから画像や図形などをコピーして新規スライドに追加
    For i = 1 To templateSlide.Shapes.Count
        If templateSlide.Shapes(i).Type <> msoTextBox Then
            templateSlide.Shapes(i).Copy
            newSlide.Shapes.Paste
        End If
    Next i
    
    ' 新規スライドのテキストボックスの文言を編集
    For Each shp In newSlide.Shapes
        If shp.Type = msoTextBox Then
            editedText = InputBox("テキストを編集してください:", "テキスト編集", shp.TextFrame.TextRange.Text)
            shp.TextFrame.TextRange.Text = editedText
        End If
    Next shp
    
    ' 新規スライドが選択されるようにする
    newSlide.Select
End Sub

これで完成しました。

ただし、このマクロの場合注意があります。それは

  • テキストボックスを他のオブジェクト(他のテキストボックス含む)と一緒にグループ化していると、グループ化されたオブジェクトの中にテキストボックスが含まれていても、それはテキストボックスと見做されない

という点です。

そのため、オブジェクトのグループ化は解除している方が良いですね。

まとめ

ChatGPTを使ってPowerPointにマクロを搭載させることに成功しました!

ChatGPTを使ってマクロを作成する際は

  1. マクロの要件を抽出
  2. 前提(どういう現況か等)と要件を指定したプロンプトを投げる
  3. 提示されたコードを実行(トライ)
  4. 狙い通りの挙動にならない場合は、再度プロンプトを投げる(修正する)
  5. 3〜4を繰り返す

という流れが必要です。少し手間のように感じますが、この記事に載せているマクロを完成させるまで30分ほどでした。

画像1枚あたりの短縮時間は1分〜2分程度かもしれませんが、今後もこの作業が続けば、30枚作ればおよそ1時間の短縮ですからね!

30枚以上を作れば時間的なリターンが大きくなりますので作業効率化を図るにはもってこいですよね!

ぜひこれからも作業効率化を図っていきます!

こういったマクロを作成するためのプロンプトはこれから必須の力となることが予想されます。

もちろん独学で研究を重ねることもできると思いますが、より本格的に学ぶならばプログラミングスクールを利用するのもひとつ!

TechAcademy [テックアカデミー] の「はじめてのプロンプトエンジニアリングコース」なら4週間で本格的なプロンプトを学ぶことができます!

TechAcademy [テックアカデミー] の「はじめてのプロンプトエンジニアリングコース」なら

  • 約1ヶ月間で実施した事前申込では個人で150名、法人で累計200名程度の方にお申し込みいただき、 既に大好評のコース
  • 非エンジニア、文系の方など様々な方が利用されている
  • 学習期間が4週間と短期間!

まずはメンターに気軽に相談!

最後まで読んでいただきありがとうございました。

この記事が少しでも参考になれば幸いです。

それではまたここで会いましょう!

ブログランキング・にほんブログ村へにほんブログ村

ブログ村に参加中です。上のバナーをクリックいただくだけで当ブログにポイントが入ります。いつも応援クリックありがとうございます。

Twitter

Twitter やってます。

新着記事のお知らせをしていますのでぜひフォローしてください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA