見出し画像

マクロのある暮らし(19回目) - パワポのアウトラインを自動でつくる

こんにちは!なるーらぼです!きょうは雨ですね・・・
前回まででExcelでやりたいことがなくなったので、今回からはまた別のマクロを探しつつ投稿していきたいと思います。

第2部、という感じの今回はパワポをやりましょう。

PowerPoint

いまや小学生も利用するというPowerPointです。むかしのPersonal Editionにはついていませんでしたが(いまもかな?)、最近はプレゼンテーションをする機会が激増していて量販店で購入できるパソコンにもインストールされた状態で販売されていたりします。

PowerPointはプレゼンテーションをするために開発されたアプリケーションで、どちらかというとビジネスでの提案資料や説明資料なんかによく利用されています。

わたしも一時はシステムエンジニアだったかどうかわからなくなるくらい利用していた気がします。Excelより良いところは方眼紙にしなくていいところでしょう!(Excelで方眼紙は好きではありませんが…)
それに、画像をつくることにも便利なのでよく使っています。

今回つくるのは次のようなものです。

このパワーポイントの資料をつくります。PowerPointで、ではなくてマクロでです。

マクロでつくろう

Excelといい、PowerPointといい、見た目とオブジェクトの構成が似ているので直観的に操作しやすいかもしれません。Excelとの大きな違いは次のとおりです。

・ExcelのWorkbookにあたるのがPresentation
・ThisWorkbookのようなオブジェクトはない
・セルがないので基本は図形の操作になる
・ExcelのWorksheetにあたるのがSlide

はい、これでだいたい以上です。

ということで先ほどのパワポ資料をつくるコードを先に掲載しておきます。

Sub note_mu()
 Dim myppt As Presentation
 Dim s As Slide
 Dim sh As Shape
 Dim i As Long
 Dim story As Variant
 Const point As Single = 28.3464
 Const myfile As String = "提案資料_#.pptx"
 story = Array("はじめに", "本日お話ししたいこと", "まとめ", "背景", "ビジネスを取り巻く環境", "現状認識", "課題ピックアップ", "考えられる解決策", "ありがとうございました")
 Set myppt = Presentations.Add(msoTrue)
 Set s = myppt.Slides.AddSlide(1, myppt.SlideMaster.CustomLayouts(1))
 s.Shapes(1).TextFrame.TextRange.Text = "ご提案:" & vbCrLf & "ナレッジベースなんとか"
 s.Shapes(2).TextFrame.TextRange.Text = "なるーらぼ"
 s.Shapes.AddPicture Environ("UserProfile") & "\Documents\なるーらぼ-logo.png", msoFalse, msoTrue, 23.28 * point, 12.31 * point
 
 For i = 2 To 10
  Set s = Nothing
  Set s = myppt.Slides.AddSlide(i, myppt.SlideMaster.CustomLayouts(2))
  s.Shapes(1).TextFrame.TextRange.Text = story(i - 2)
 Next
 
 Set sh = s.Shapes.AddPicture(Environ("UserProfile") & "\Documents\なるーらぼ-logo.png", msoFalse, msoTrue, 23.28 * point, 12.31 * point)
 sh.Left = 23.28 * point
 sh.Top = 12.31 * point
 
 myppt.SaveAs Environ("UserProfile") & "\Documents\" & Replace(myfile, "#", Format(Now, "yyyymmddhhmmss"))
 myppt.Close
 Set myppt = Nothing
 MsgBox "complete.", vbInformation, "プレゼン自動作成"
End Sub

長いですね!!

作り方

今回の資料はアウトラインなので見出しだけを各スライドに追加しておくだけにしています。しかし1枚目だけはタイトルスライドなので資料のタイトルと名前、ロゴを入れています。最後の「ありがとうございました」スライドにもロゴを入れています。

各スライドのタイトルになるものは横着をしましてArrayによる配列で定義しています。

story = Array("はじめに", "本日お話ししたいこと", "まとめ", "背景", "ビジネスを取り巻く環境", "現状認識", "課題ピックアップ", "考えられる解決策", "ありがとうございました")

ここはテキストファイルなどから読み込むような形にしてもいいかもしれません。

新規につくります。ですからPresentationsコレクションへ「Add」で追加するところからはじまります。

Set myppt = Presentations.Add(msoTrue)

Excelでいう「Workbooks.Add」と同じですね。そうして追加したプレゼンをつかんだら次は必要なだけのスライドを追加していきます。でも最初だけタイトルスライドなので個別でいれます。

Set s = myppt.Slides.AddSlide(1, myppt.SlideMaster.CustomLayouts(1))

AddSlideメソッドは一つ目の引数が何番目のスライドか(1からはじまります)、二つ目はレイアウトです。ここではスライドマスタの1つめのレイアウトを選択しています。

このレイアウトにはご覧のとおりフッター以外には2つのテキストボックスがあります。そこで1つ目にはタイトルを、二つ目には名前を入れるようにしています。

s.Shapes(1).TextFrame.TextRange.Text = "ご提案:" & vbCrLf & "ナレッジベースなんとか"
s.Shapes(2).TextFrame.TextRange.Text = "なるーらぼ"

図形にはテキストが含まれる枠(TextFrame)があって、そのうち文字が入る場所(TextRange)があります。そしてその場所を示すオブジェクトのTextプロパティへ値をセットすることで文字として入力することができます。

さらに、ロゴを入れたいのでAddPictureメソッドを使って図形を入れています。

s.Shapes.AddPicture Environ("UserProfile") & "\Documents\なるーらぼ-logo.png", msoFalse, msoTrue, 23.28 * point, 12.31 * point

なんだかものすごく長いのですが、指定している引数は5つです。左から、

1. 追加する画像ファイルパス
2. 画像へリンクもするか,
3. 画像をドキュメント内に保存するか
4. 左からの距離(単位:ポイント)
5. 上からの距離(単位:ポイント)

単位をポイントへ変換したいのですが、プロパティから調べることができるのは単位がセンチメートルです。

1センチメートルはおよそ28.3464ポイントなので、これを定数として掛け算した値で指定しています。

あとは9枚分のスライドを配列から読んでは1つ目のテキストボックスへ入れていきます。このとき、マスタースライドの2番目のレイアウトを使っているので、スライドの見出し部分にだけテキストが入るようになります。

For i = 2 To 10
 Set s = Nothing
 Set s = myppt.Slides.AddSlide(i, myppt.SlideMaster.CustomLayouts(2))
 s.Shapes(1).TextFrame.TextRange.Text = story(i - 2)
Next

ロゴは最初と同様にしたのですが、思ったような位置になってくれなかったので直接に図形オブジェクトの左と上からの距離も入れています。

最後にファイル名を付けて保存します。「提案資料_yyyymmddhhmmss.pptx」という感じの名づけルールで保存します。形式を指定していないので2007形式(pptx)で保存されます。

myppt.SaveAs Environ("UserProfile") & "\Documents\" & Replace(myfile, "#", Format(Now, "yyyymmddhhmmss"))
myppt.Close

そうするとドキュメントフォルダ内へファイルが保存されています。あとは好きなだけ内容を盛り込んでいってください。

最後に

今回は自動的にアウトラインをつくるものをやってみました。

久しぶりにやってみると、ある形式でテキストファイルをつくっておいたらメモ帳なんかで内容だけざーっと書いておいて、コメントも書いておいて。
それを読み込みながらパワポにできたなぁということに思いをはせております(つくればよかった…)。

画像などもあらかじめ決まったルールで書いておけば埋め込むことができそうですね。場所は正直いってファイルができたら見ながら移動することもできますし、デザインテンプレートもあとから適用できるでしょう。

テンプレートファイルを用意しておいて、テキストだけ流し込むというのも便利かもしれませんね。

ではまた、よい一日を!

この記事が気に入ったらサポートをしてみませんか?