【PowerPoint VBA】PowerPointのノートをまとめるマクロ(サイト紹介+改造)

2012年3月21日

インストラクターのネタ帳 はご存知ですか?

Wordに限らず、Excel やPowerPoint の使い方をネットで検索すると、必ずといっていいほど記事にあたりますよね。

以前も「3桁ごとにコンマを入れるマクロ」にて参考記事として紹介させていただきましたが、私は何かとお世話になっている情報源です。

さて、今回は、このインストラクターのネタ帳 に掲載されていたPowerPoint用のマクロを改造させていただき使ってみました。

便利なのでみなさんにもご紹介します。

このマクロでできること

今回参考にさせていただいたのは、「すべてのノートをまとめるマクロ 」です。

このマクロをPowerPoint にて実行すると、ノートに記載されているすべての文字列を、スライドの最終ページにまとめてくれます。

現在対応中の案件は、パワーポイントの翻訳で、ノートにも翻訳対象の文章が大量にあります。

やはり、私はWordで翻訳をするのが得意なので、PowerPoint のノート部分の文字をWordに移して作業をしたいわけです。

そのため、スライド毎にノートをコピーする手間を、マクロにまかせてみました。まさしくマクロの出番。

なお、このマクロでは、文字列を取得するため、書式情報(上付き・下付き、文字色など)は失われてしまいますのでご注意ください。

(参考)
PowerPointからWord文書を作る方法は、標準で搭載されています(インストラクターのネタ帳のこちらの記事「PPTファイルからWord文書を作成 」(Word 2003)、「PowerPoint2007でWordへ送信は?-Microsoft Office Wordで配布資料を作成 」(Word 2007)、「PowerPoint2010からWordにアウトライン-ファイル-保存と送信-配布資料の作成 」(Word 2010)などをご参照ください)。

今扱っている案件で上記の方法を用いると文字化けする部分があるので、マクロを使って実行してみることにしました。

マクロの解説

マクロの実行前に、7行目でしめしたとおり実行の確認文が入っています。

1行のマクロですが、If ステートメントにて実行の中断が判定できるような仕組みになっていますね。

私が以前書いた方法にくらべると非常にすっきりしています。

是非参考にしていきたいものです。

さて、私が追記したのは13行目の部分です。

Wordにコピーして翻訳をした後に、またPowerPoint のノートに戻そうと思うので、見分けがつくようにページ番号を入力してみました。

マクロ


Sub MergeAllNotes_改造()

 Dim objSlide As Slide
 Dim objText As TextRange
 Dim strNote As String

 If MsgBox("ファイル内のすべてのノートをまとめますか?", vbYesNo) = vbNo Then Exit Sub

 For Each objSlide In ActivePresentation.Slides
  With objSlide
   i = 2
   For Each objText In .NotesPage.Shapes.Placeholders(2).TextFrame.TextRange
    strNote = strNote & "【" & .SlideNumber & "ページ目】" & vbCrLf & _
         .NotesPage.Shapes.Placeholders(2).TextFrame.TextRange & vbCrLf
   Next objText
  End With
 Next objSlide

 With ActivePresentation.Slides
  .Add Index:=.Count + 1, Layout:=ppLayoutBlank
  ActivePresentation.Slides(.Count).NotesPage.Shapes.Placeholders(2).TextFrame.TextRange = strNote
 End With

 MsgBox ("最後のスライドのノートに、ファイル内のすべてのノートをまとめました。")

End Sub

 

-コード
-