Excelの表をパワーポイントに出力するVBAをChatGPTで壁打ちしながら実行させてみた。Bing AIにもやらせてみた。

以下のExcelの表をパワーポイントに出力するVBAをChatGPTに質問してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/74e5a178-13d4-4534-dfb3-c488f9d99c7e.png)
スライドNo.	構成	仮説	So What?
1	ChatGPT 最新動向	-	最新動向を理解し、導入検討時の意思決定に役立てる
2	バージョンアップデート	性能が向上し、より多機能	ChatGPTの進化や新たな可能性を理解し、企業のニーズにどのように適応できるかを評価できる
3	新機能・拡張機能	新たな業界向け機能やプラットフォームとの統合機能を追加	効率的な業務遂行や競争優位性を向上させる可能性を探る
4	パフォーマンス向上	高速で、精度の向上が見られる	効率的な業務遂行やコスト削減が期待でき、企業のROIが向上する可能性がある
5	セキュリティ・プライバシー	データセキュリティとプライバシー保護を強化、法規制対応力向上	企業は法規制や顧客の信頼を守りながら、安心してChatGPTを導入・利用できる
6	インテグレーション	業務アプリケーションやプラットフォームとの連携が容易	企業は既存のシステムやツールと統合し、業務プロセスの効率化や一貫性を向上させることができる
7	サポート・ドキュメンテーション	ユーザーサポートが充実し、ドキュメンテーション改善	企業はChatGPTの導入や運用において迅速かつ円滑な対応が可能となり、トラブル時のリスク軽減が期待できる
9	競合他社の動向	競合他社も新機能やサービスを展開	ChatGPTが市場でどのような立ち位置にあり、どのように競争力を維持・向上させるべきかを理解し、戦略的な意思決定に役立てる
10	今後の展望	技術革新や業界トレンドに対応するロードマップ策定	企業はChatGPTと長期的なパートナーシップを築く上で、技術革新や市場トレンドに適応していく戦略を立てることができる

質問はこちらの通り
```質問
以下の表を、構成をスライドタイトル、仮説とSo What?をスライドの内容の箇条書きにする
パワーポイントを出力するVBAを考えてください。
スライドNo.	構成	仮説	So What?
1	ChatGPT 最新動向	-	最新動向を理解し、導入検討時の意思決定に役立てる
2	バージョンアップデート	性能が向上し、より多機能	ChatGPTの進化や新たな可能性を理解し、企業のニーズにどのように適応できるかを評価できる
3	新機能・拡張機能	新たな業界向け機能やプラットフォームとの統合機能を追加	効率的な業務遂行や競争優位性を向上させる可能性を探る
4	パフォーマンス向上	高速で、精度の向上が見られる	効率的な業務遂行やコスト削減が期待でき、企業のROIが向上する可能性がある
5	セキュリティ・プライバシー	データセキュリティとプライバシー保護を強化、法規制対応力向上	企業は法規制や顧客の信頼を守りながら、安心してChatGPTを導入・利用できる
6	インテグレーション	業務アプリケーションやプラットフォームとの連携が容易	企業は既存のシステムやツールと統合し、業務プロセスの効率化や一貫性を向上させることができる
7	サポート・ドキュメンテーション	ユーザーサポートが充実し、ドキュメンテーション改善	企業はChatGPTの導入や運用において迅速かつ円滑な対応が可能となり、トラブル時のリスク軽減が期待できる
9	競合他社の動向	競合他社も新機能やサービスを展開	ChatGPTが市場でどのような立ち位置にあり、どのように競争力を維持・向上させるべきかを理解し、戦略的な意思決定に役立てる
10	今後の展望	技術革新や業界トレンドに対応するロードマップ策定	企業はChatGPTと長期的なパートナーシップを築く上で、技術革新や市場トレンドに適応していく戦略を立てることができる
```

【以下回答】
以下のVBAコードは、指定された表からパワーポイントスライドを生成します。表のデータは、Excelのシートに配置されている必要があります。

```vba
Sub CreateTableBasedSlides()
    Dim oPPT As PowerPoint.Application
    Dim oPresentation As PowerPoint.Presentation
    Dim oSlide As PowerPoint.Slide
    Dim oTable As ListObject
    Dim oCell As Range
    Dim i As Long

    ' PowerPointアプリケーションを開始
    Set oPPT = New PowerPoint.Application
    oPPT.Visible = True

    ' 新しいプレゼンテーションを作成
    Set oPresentation = oPPT.Presentations.Add

    ' Excelのデータテーブルを取得
    Set oTable = ThisWorkbook.Worksheets("Sheet1").ListObjects(1)

    ' テーブルの各行に対してスライドを作成
    For i = 2 To oTable.ListRows.Count
        ' スライドを追加
        Set oSlide = oPresentation.Slides.Add(i - 1, ppLayoutText)

        ' タイトルを設定
        oSlide.Shapes(1).TextFrame.TextRange.Text = oTable.ListColumns(2).DataBodyRange.Cells(i - 1, 1)

        ' 仮説とSo What?を箇条書きに設定
        oSlide.Shapes(2).TextFrame.TextRange.Text = "仮説: " & oTable.ListColumns(3).DataBodyRange.Cells(i - 1, 1) & vbCrLf & "So What?: " & oTable.ListColumns(4).DataBodyRange.Cells(i - 1, 1)
        oSlide.Shapes(2).TextFrame.TextRange.ParagraphFormat.Bullet.Type = ppBulletUnnumbered
        oSlide.Shapes(2).TextFrame.TextRange.ParagraphFormat.Bullet.Visible = msoTrue
    Next i
End Sub
```

このコードは、ExcelのVBAエディターに貼り付け、実行することで動作します。Excelのシートに配置された表から、パワーポイントスライドを生成します。タイトル、仮説、およびSo What?が各スライドに配置されます。

【ここまで】

Excelで実行したらエラーになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/e7357c8d-a020-5778-136f-ca027d1102e5.png)

ChatGPTに質問してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/9ee2530c-2dd0-4161-aea1-b5c625cf941b.png)

なるほど、以下の設定をすればよいようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/9243482b-ab14-8be4-4e1c-460c1229c926.png)

エラーになったのでまたChatGPTに聞いてみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/087dce32-fad7-6f62-270e-600a2e520d77.png)
シート名はあっているので、Index指定してないよとの指摘

表を全部選択して、そこからマウスを右クリック「テーブルまたは範囲からデータ」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/4af48b00-5bb0-8a4e-83d3-5d9ce658a6dc.png)
テーブルを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/def95a07-072b-f3a9-4b4d-63502631df65.png)
テーブル名称を「table1」で指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/3a7447e4-f055-85d6-67f6-fbf2cc974a18.png)
テーブル化完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/fc8294e5-a5e0-3bac-325c-a4cb97a3081c.png)
マクロを実行したら、ちゃんとパワポに出力された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31402/a60f6ba8-964e-3c97-e82b-b246fd9fe929.png)
動きました。おしまい。

【追記】
Bing AIに同じ質問をしてみた。

```Bing AI
Sub ExportTableToPowerPoint()
    'Excelの表を参照する
    Dim ws As Worksheet
    Dim rng As Range
    Set ws = ActiveSheet
    Set rng = ws.Range("A1:D10")
    
    'PowerPointのオブジェクトを作成する
    Dim pptApp As Object
    Dim pptPres As Object
    Dim pptSlide As Object
    Dim pptShape As Object
    
    On Error Resume Next
    Set pptApp = GetObject(, "PowerPoint.Application")
    If Err.Number <> 0 Then
        Set pptApp = CreateObject("PowerPoint.Application")
        Err.Clear
    End If
    
    'PowerPointのプレゼンテーションを新規作成する
    Set pptPres = pptApp.Presentations.Add
    
    'Excelの表の行数と列数を取得する
    Dim rowCnt As Long
    Dim colCnt As Long
    rowCnt = rng.Rows.Count
    colCnt = rng.Columns.Count
    
    'Excelの表の各行に対してループする
    Dim i As Long
    For i = 1 To rowCnt
        
        'PowerPointのスライドを追加する
        Set pptSlide = pptPres.Slides.Add(i, 11) '11はタイトルとコンテンツのレイアウト
        
        'スライドのタイトルに構成をセットする
        pptSlide.Shapes(1).TextFrame.TextRange.Text = rng.Cells(i, 2).Value
        
        'スライドのコンテンツにテキストボックスを追加する
        Set pptShape = pptSlide.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 100, 500, 300)
        
        'テキストボックスに仮説とSo What?をセットする
        pptShape.TextFrame.TextRange.Text = "仮説: " & rng.Cells(i, 3).Value & vbCrLf & "So What?: " & rng.Cells(i, 4).Value
        
        'テキストボックスのフォントサイズを調整する
        pptShape.TextFrame.TextRange.Font.Size = 20
        
        'テキストボックスの位置とサイズを調整する
        pptShape.Left = pptSlide.Shapes(2).Left + 10 'コンテンツプレースホルダーの左端に合わせる
        pptShape.Top = pptSlide.Shapes(2).Top + 10 'コンテンツプレースホルダーの上端に合わせる
        pptShape.Width = pptSlide.Shapes(2).Width - 20 'コンテンツプレースホルダーの幅に合わせる
        pptShape.Height = pptSlide.Shapes(2).Height - 20 'コンテンツプレースホルダーの高さに合わせる
        
    Next i
    
    'PowerPointを表示する
    pptApp.Visible = True
    
End Sub
```

あれ？Bingのほうが可読性高くない？
悪くない。