三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Shapes.AddTextboxでテキストボックスを追加 ExcelのA列からG列をPowerPointにセット

A~G列でパワポスライドを1ページ作成する

PowerPointにTextBoxを追加するのは簡単で、
Set ppShape = ppSlide.Shapes.AddTextbox(1, 500, 200, 400, 50)
↑、みたいな感じで、
Shapes.AddTextbox(方向, Left:左上, Top:上位置, Width:幅, Height:高さ)
で簡単に追加できました。

youtu.be
https://youtu.be/Vt2p1WSEFFo
目次
00:00 あいさつ、昔どこかで見たコード?
下記、昔の動画です
Excel VBA A列のデータを使ってPowerPointスライドを自動作成する方法【マクロ自動転記】 例題:Excel A列データをPowerPointのスライドタイトルにセット - YouTube
↑これか?これがコピペされて、悪さしていたのかなぁ・・・キレイなコード書かないとな・・・
00:40 1.なんか、懐かしい?コードを走らせる
02:13 2.テキストボックスの追加
07:03 3.位置指定は配列で?
10:28 4.プロパティを調べたい
13:59 追加テスト と 5.終わりの挨拶

Shapes.AddTextboxでテキストボックスが追加できるので、やってみてください。
Shapes.AddTextbox メソッド (PowerPoint)
learn.microsoft.com
↑で、いろいろ設定できると思います。

#PowerPointVBA #ExcelVBA #ms365 #転記マクロ #自動転記

1.なんか、懐かしい?コードを走らせる

どこかで見かけたコード・・・?
detail.chiebukuro.yahoo.co.jp

Sub TEST()

Dim oApp As Object

'PowerPoint の 起動、インターフェース用のオブジェクトを作る
Set oApp = CreateObject("PowerPoint.Application")
oApp.Visible = True '可視にする

'新規プレゼンのファイル作成 新規の空ファイル作成
oApp.Presentations.Add WithWindow:=msoTrue

'ここからスライドをA列のデータがなくなるまで、追加する

Dim n As Integer
Dim strTITLE As String 'A列のデータをタイトルにする

For n = 1 To 99 'MAX99枚 A列のデータを使用してスライドを作成
'A列のデータ存在チェック
strTITLE = Trim("" & Cells(n, "A").Text) 'A列のデータを取り出し、左右の空白をカット
If Len(strTITLE) = 0 Then Exit For '文字列の長さが0 データ無しならループ処理を抜ける

'スライドの追加
'レイアウトの種類
'Layout:=ppLayoutText 2
'Layout:=ppLayoutTitleOnly 11
'Layout:=ppLayoutTwoColumnText 3
oApp.ActiveWindow.View.GotoSlide Index:=oApp.ActivePresentation.Slides.Add(Index:=n, Layout:=2).SlideIndex

'タイトルをセット 一番目のオブジェクトにテキストセット
oApp.ActiveWindow.Selection.SlideRange.Shapes(1).TextFrame.TextRange.Text = strTITLE

'B列 内容
oApp.ActiveWindow.Selection.SlideRange.Shapes(2).TextFrame.TextRange.Text = Cells(n, "B").Text


Next n

End Sub

2.テキストボックスの追加

G列まで、データを追加したかったので、
テキストボックスを追加

'テキストの方向を指定します。
'msoTextOrientationHorizontal : 1 横方向, Left:左上 , Top:上位置, Width:幅, Height:高さ
Set ppShape = ppSlide.Shapes.AddTextbox(1, 500, 70 * x, 400, 50)

↑、みたいな感じで、Shapes.AddTextbox (方向,Left:左上 , Top:上位置, Width:幅, Height:高さ)
です

これを組み込んで、
For x = 3 To 7 'C列DEFG列が、3,4,5,6,7列なので、3t o7のループ
のループで、
テキストを作成してみます。

'テキストボックス追加のサンプル
Sub TEST230701()

    Dim oApp As Object
    
    'PowerPoint の 起動、インターフェース用のオブジェクトを作る
    Set oApp = CreateObject("PowerPoint.Application")
    oApp.Visible = True '可視にする
    
    '新規プレゼンのファイル作成 新規の空ファイル作成
    oApp.Presentations.Add WithWindow:=msoTrue
    
    'ここからスライドをA列のデータがなくなるまで、追加する
    
    Dim n As Integer
    Dim strTITLE As String 'A列のデータをタイトルにする
    
    For n = 1 To 99 'MAX99枚 A列のデータを使用してスライドを作成
        'A列のデータ存在チェック
        strTITLE = Trim("" & Cells(n, "A").Text) 'A列のデータを取り出し、左右の空白をカット
        If Len(strTITLE) = 0 Then Exit For '文字列の長さが0 データ無しならループ処理を抜ける
        
        'スライドの追加
        'レイアウトの種類
        'Layout:=ppLayoutText 2
        'Layout:=ppLayoutTitleOnly 11
        'Layout:=ppLayoutTwoColumnText 3
        oApp.ActiveWindow.View.GotoSlide Index:=oApp.ActivePresentation.Slides.Add(Index:=n, Layout:=2).SlideIndex
        
        'タイトルをセット 一番目のオブジェクトにテキストセット
        oApp.ActiveWindow.Selection.SlideRange.Shapes(1).TextFrame.TextRange.Text = strTITLE
        
        'B列 内容
        oApp.ActiveWindow.Selection.SlideRange.Shapes(2).TextFrame.TextRange.Text = Cells(n, "B").Text
    
        'C列~G列、テキストボックスを追加する 2023/07/01追加
        Dim ppSlide As Object   'スライド
        Set ppSlide = oApp.ActivePresentation.Slides(n) 'nページなので、ぉぃぉぃ
        
        Dim ppShape As Object    'パワポのShapeオブジェクト
        Dim x As Long
        For x = 3 To 7  'C列DEFG列が、3,4,5,6,7列なので、3 to 7のループ
            
            'テキストの方向を指定します。
            'msoTextOrientationHorizontal : 1   横方向, Left:左上 , Top:上位置, Width:幅, Height:高さ
            Set ppShape = ppSlide.Shapes.AddTextbox(1, 500, 70 * x, 700, 50)
            '↑ 左位置、70*x とか やっているけど、アレンジしてください
            With ppShape.TextFrame.TextRange  '↑の追加テキストTextFrameに対して
                .Text = Cells(n, x).Text    'Excel C列~ n行目のx列で値をセットする
                .Font.Size = 30    'フォントサイズ ほかもイロイロあるけど
            End With
        Next x
    
    Next n

End Sub


3.位置指定は配列で?

タテに並ぶとは限らないし、テキストボックスの位置を微調整したいので、

    'セット位置を頭で指定
    Dim textboxLEFT(10) As Double
    Dim textboxTOP(10) As Double

    textboxLEFT(3) = 100: textboxTOP(3) = 100  'C列
    textboxLEFT(4) = 200: textboxTOP(4) = 200  'D列
    textboxLEFT(5) = 300: textboxTOP(5) = 300  'E列
    textboxLEFT(6) = 400: textboxTOP(6) = 400  'F列
    textboxLEFT(7) = 500: textboxTOP(7) = 500  'G列

と、
頭で数値をセットして、といっても、直接コードに書いてるけど・・・
※プロなら、設定シートから・・と思ったけど、まぁ、いっか・・・

Set ppShape = ppSlide.Shapes.AddTextbox(1, textboxLEFT(x), textboxTOP(x), 400, 50)
'↑ 頭でセットしたtextboxLEFT(x), textboxTOP(x)をセットしてみた。アレンジしてください

で、位置のセットをしてみました。

'蛇足、C列~G列 左上位置を配列にする
'テキストボックス追加のサンプル
Sub TEST230701_蛇足1()

    'セット位置を頭で指定
    Dim textboxLEFT(10) As Double
    Dim textboxTOP(10) As Double

    textboxLEFT(3) = 100: textboxTOP(3) = 100  'C列
    textboxLEFT(4) = 200: textboxTOP(4) = 200  'D列
    textboxLEFT(5) = 300: textboxTOP(5) = 300  'E列
    textboxLEFT(6) = 400: textboxTOP(6) = 400  'F列
    textboxLEFT(7) = 500: textboxTOP(7) = 500  'G列

    Dim oApp As Object
    
    'PowerPoint の 起動、インターフェース用のオブジェクトを作る
    Set oApp = CreateObject("PowerPoint.Application")
    oApp.Visible = True '可視にする
    
    '新規プレゼンのファイル作成 新規の空ファイル作成
    oApp.Presentations.Add WithWindow:=msoTrue
    
    'ここからスライドをA列のデータがなくなるまで、追加する
    
    Dim n As Integer
    Dim strTITLE As String 'A列のデータをタイトルにする
    
    For n = 1 To 99 'MAX99枚 A列のデータを使用してスライドを作成
        'A列のデータ存在チェック
        strTITLE = Trim("" & Cells(n, "A").Text) 'A列のデータを取り出し、左右の空白をカット
        If Len(strTITLE) = 0 Then Exit For '文字列の長さが0 データ無しならループ処理を抜ける
        
        'スライドの追加
        'レイアウトの種類
        'Layout:=ppLayoutText 2
        'Layout:=ppLayoutTitleOnly 11
        'Layout:=ppLayoutTwoColumnText 3
        oApp.ActiveWindow.View.GotoSlide Index:=oApp.ActivePresentation.Slides.Add(Index:=n, Layout:=2).SlideIndex
        
        'タイトルをセット 一番目のオブジェクトにテキストセット
        oApp.ActiveWindow.Selection.SlideRange.Shapes(1).TextFrame.TextRange.Text = strTITLE
        
        'B列 内容
        oApp.ActiveWindow.Selection.SlideRange.Shapes(2).TextFrame.TextRange.Text = Cells(n, "B").Text
    
        'C列~G列、テキストボックスを追加する 2023/07/01追加
        Dim ppSlide As Object   'スライド
        Set ppSlide = oApp.ActivePresentation.Slides(n) 'nページなので、ぉぃぉぃ
        
        Dim ppShape As Object    'パワポのShapeオブジェクト
        Dim x As Long
        For x = 3 To 7  'C列DEFG列が、3,4,5,6,7列なので、3t o7のループ
            'テキストの方向を指定します。
            'msoTextOrientationHorizontal : 1   横方向, Left:左上 , Top:上位置, Width:幅, Height:高さ
            Set ppShape = ppSlide.Shapes.AddTextbox(1, textboxLEFT(x), textboxTOP(x), 400, 50)
            '↑ 頭でセットしたtextboxLEFT(x), textboxTOP(x)をセットしてみた。アレンジしてください
            With ppShape.TextFrame.TextRange  '↑の追加テキストTextFrameに対して
                .Text = Cells(n, x).Text    'Excel C列~ n行目のx列で値をセットする
                .Font.Size = 30    'フォントサイズ ほかもイロイロあるけど
            End With
        Next x
    
    Next n

End Sub

4.プロパティを調べたい

文字の
プロパティを調べたい時、

PowerPointVBAに行き、

Dim ppShape As PowerPoint.Shape

With ppShape.TextFrame.TextRange  '↑の追加テキストTextFrameに対して
    .Text = "Abc"
    .Font.Size = 30
End With

なと、打ち込んで、
.で確認するとか、F1を押して、ヘルプを見るとかかなぁ・・・

※素直に参照設定すれば、Excelで確認できるか、、、

5.終わりの挨拶

Excelのデータを
PowerPointに軽くセットする、
転記する処理の参考となれば幸いです。

新規にテキストボックスを作りながらだと大変なので、テンプレートでサイズや色・位置を決めてた、ひな型ファイルにセットする方法を最近は良く使ってます。
Excel To PowerPoint 差し込み印刷もどき エクセルのデータからパワポのスライドを自動作成する - YouTube
https://www.youtube.com/playlist?list=PL8vZhsyiiFhtDYDOdz94s6bQ54vwPRN-3
↑みたいな感じで、テンプレートに差し込み印刷みたいにデータを流し込んでいたりします。
こちらの処理方法もやってみてください。
※新規で一から作る方法が好きな人も居るし、テンプレート流し込みが好きな人も居るし、上司や設計する先輩の好みかなぁ・・・

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)