#【解析屋さんのためのExcelVBA(番外編その2)】PowerPointのスライドを任意のサイズで画像として出力する


はやし@color_chipsです。

PowerPointって保存時にスライドを一枚ずつ画像形式で出力できる事を知っていますか?
形式は、JPG若しくはPNGだけですが、便利ですよね。
ただ、出力される画像の解像度があまり選べないのが難点です。

というわけで、スライド画像出力を任意の解像度にする方法を調べました。
結論から言うと、

  • レジストリをいじる
  • VBAでやる

の2パターンだそう。
レジストリはいじりたくないので、VBAでやってみました。

というわけで、ソースコード


    Option Explicit
    '//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
    '//[[ Function   : 全スライドを画像として出力                            ]]
    '//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
    Sub OutputSlideImage()

        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ 変数定義 ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        Dim szPath As String
        Dim stPresentation As Presentation
        Dim stSlide As Slide
        Dim count As Long
        Dim i As Integer
        Dim width As Integer
        Dim height As Integer
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ パラメータ指定 ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        width = 1440    '画像幅
        height = 1080   '画像高さ

        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ フォルダ指定 ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        szPath = SelectFolderInBrowser()
        ' フォルダ選択されていなければ終了
        If szPath = "" Then
            Exit Sub
        End If

        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ 出力 ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        count = 1
        Set stPresentation = ActivePresentation
        For Each stSlide In stPresentation.Slides
            stSlide.Export szPath & "\Slide" & Right(count + 10 ^ 3, 3) & ".jpg", "JPG", width, height
            count = count + 1
        Next stSlide
    End Sub


    '//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
    '//[[ Function   : フォルダ選択ダイアログ                                       ]]
    '//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
    Private Function SelectFolderInBrowser(Optional vRootFolder As Variant) As String
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ 変数定義                   ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        Dim objFolder As Object
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ フォルダ選択ダイアログ     ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        Set objFolder = CreateObject("Shell.Application").BrowseForFolder( _
                                     0, _
                                     "出力フォルダ選択", _
                                     &H211, _
                                     vRootFolder)

        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        '//[[ 選んだパスを取得     ]]
        '//[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]
        If Not (objFolder Is Nothing) Then
            SelectFolderInBrowser = objFolder.Items.Item.Path
        Else
            SelectFolderInBrowser = ""
        End If
        Set objFolder = Nothing
    End Function

説明

パラメータ設定で以下の設定をした後、OutputSlideImageを実行してください

  • width: 出力画像サイズ(幅)
  • height: 出力画像サイズ(高さ)

PowerPointでVBAの使い方は、こちらをどうぞ。
【解析屋さんのためのExcelVBA(番外編)】PowerPointVBAで指定フォルダ内の画像を整列して並べる:ComputerScience - color pencils

制限事項

  • 画像サイズは、3072×3072まで(それ以上大きいサイズ指定しても、このサイズになります)
  • 縦横比率は保たれず、指定したサイズに伸縮されます

といわけで、目的だったパワポのスライドの任意画像解像度出力が出来ました。

関連記事