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.プロパティを調べたい
文字の
プロパティを調べたい時、
PowerPointのVBAに行き、
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
↑みたいな感じで、テンプレートに差し込み印刷みたいにデータを流し込んでいたりします。
こちらの処理方法もやってみてください。
※新規で一から作る方法が好きな人も居るし、テンプレート流し込みが好きな人も居るし、上司や設計する先輩の好みかなぁ・・・