パワーポイントの最初のページに、○○株式会社御中 という文字があります。

この ○○株式会社 という部分をエクセルのシートの例えばA列にずらっと並んだ文書を自動的にコピペして、列の数分だけパワーポイント文書を作成し、それぞれ保存するマクロというのは作れますでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/01/18 13:05:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:airplant No.1

回答回数220ベストアンサー獲得回数49

ポイント35pt

PowerPointが手元にないので動作確認できませんが、プログラム上は掲載したマクロで要望のことが実現できるはずです。

  • 先頭だけでなく全部を置き換え
  • 出力ファイル名は、会社名。実行時のディレクトリに保存

エラーが出たら、すみません。コメント欄にてやり取りしたいと思います。


参照設定というものが必要なので、Excel側のVBEで「ツール」→「参照設定」でパワーポイントのライブラリをつけてください。

オリジナルの入れ替え対象文字、元pptディレクトリ・ファイル名、会社名記載列は、適宜変更ください。

'参照設定 Microsoft Powerpoint ~ Object Library が必要
Option Explicit

Const sOrgCorp As String = "○○株式会社"
Const sOrgPPT As String = "C:\プレゼン資料\Original.ppt"

Sub DupPPT()

    Dim rngPPTfile As Range
    Dim sNewPPT As String
    Dim oPPT As Object
    
    Set oPPT = CreateObject("PowerPoint.Application")
    oPPT.Visible = True
    
    Range("A1").Select
    For Each rngPPTfile In Selection.CurrentRegion
        sNewPPT = rngPPTfile.Value
        Set oPresen = oPPT.Presentations.Open(sOrgPPT)
        Call ReplaceText(sOrgCorp, sNewPPT)
        oPresen.SaveAs sNewPPT
        oPresen.Close
        Set oPresen = Nothing
    Next
    oPPT.Quit

End Sub

Sub ReplaceText(sFrom As String, sTo As String)
    
    Dim oSld As Slide
    Dim oShp As Shape
    Dim oTxtRng As TextRange
    Dim oTmpRng As TextRange

    Set oSld = Application.ActivePresentation.Slides(1)

    For Each oShp In oSld.Shapes
        Set oTxtRng = oShp.TextFrame.TextRange
        Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
            Replacewhat:=sTo)
        Do While Not oTmpRng Is Nothing
            Set oTxtRng = oTxtRng.Characters(oTmpRng.Start + oTmpRng.Length, _
                oTxtRng.Length)
            Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
                Replacewhat:=sTo)
        Loop
    Next oShp

End Sub

http://q.hatena.ne.jp/1157507418

その他の回答1件)

id:airplant No.1

回答回数220ベストアンサー獲得回数49ここでベストアンサー

ポイント35pt

PowerPointが手元にないので動作確認できませんが、プログラム上は掲載したマクロで要望のことが実現できるはずです。

  • 先頭だけでなく全部を置き換え
  • 出力ファイル名は、会社名。実行時のディレクトリに保存

エラーが出たら、すみません。コメント欄にてやり取りしたいと思います。


参照設定というものが必要なので、Excel側のVBEで「ツール」→「参照設定」でパワーポイントのライブラリをつけてください。

オリジナルの入れ替え対象文字、元pptディレクトリ・ファイル名、会社名記載列は、適宜変更ください。

'参照設定 Microsoft Powerpoint ~ Object Library が必要
Option Explicit

Const sOrgCorp As String = "○○株式会社"
Const sOrgPPT As String = "C:\プレゼン資料\Original.ppt"

Sub DupPPT()

    Dim rngPPTfile As Range
    Dim sNewPPT As String
    Dim oPPT As Object
    
    Set oPPT = CreateObject("PowerPoint.Application")
    oPPT.Visible = True
    
    Range("A1").Select
    For Each rngPPTfile In Selection.CurrentRegion
        sNewPPT = rngPPTfile.Value
        Set oPresen = oPPT.Presentations.Open(sOrgPPT)
        Call ReplaceText(sOrgCorp, sNewPPT)
        oPresen.SaveAs sNewPPT
        oPresen.Close
        Set oPresen = Nothing
    Next
    oPPT.Quit

End Sub

Sub ReplaceText(sFrom As String, sTo As String)
    
    Dim oSld As Slide
    Dim oShp As Shape
    Dim oTxtRng As TextRange
    Dim oTmpRng As TextRange

    Set oSld = Application.ActivePresentation.Slides(1)

    For Each oShp In oSld.Shapes
        Set oTxtRng = oShp.TextFrame.TextRange
        Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
            Replacewhat:=sTo)
        Do While Not oTmpRng Is Nothing
            Set oTxtRng = oTxtRng.Characters(oTmpRng.Start + oTmpRng.Length, _
                oTxtRng.Length)
            Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
                Replacewhat:=sTo)
        Loop
    Next oShp

End Sub

http://q.hatena.ne.jp/1157507418

id:airplant No.2

回答回数220ベストアンサー獲得回数49

ポイント35pt

掲載したものにはバグがあり、動きませんでした。

動作確認した動くバージョンを再度アップします。

なお、動作確認したところ、先頭ページのみを変更する仕様でした。間違いを記載してすみませんでした。

'参照設定 Microsoft Powerpoint ~ Object Library が必要
Option Explicit

Const sOrgCorp As String = "○○株式会社"
Const sOrgPPT As String = "C:\プレゼン資料\Original.ppt"
Dim oPresen As Object   '定義抜け

Sub DupPPT()

    Dim rngPPTfile As Range
    Dim sNewPPT As String
    Dim oPPT As Object
    
    Set oPPT = CreateObject("PowerPoint.Application")
    oPPT.Visible = True
    
    Range("A1").Select
    For Each rngPPTfile In Selection.CurrentRegion
        sNewPPT = rngPPTfile.Value
        Set oPresen = oPPT.Presentations.Open(sOrgPPT)
        Call ReplaceText(sOrgCorp, sNewPPT)
        oPresen.SaveAs CurDir & "\" & sNewPPT     '修正(フォルダを記載しないとなぜかC:\Windows\Win32にできる)
        oPresen.Close
        Set oPresen = Nothing
    Next
    oPPT.Quit

End Sub

Sub ReplaceText(sFrom As String, sTo As String)
    
    Dim oSld As Slide
'    Dim oShp As Shape  '修正
    Dim oShp As Object
    Dim oTxtRng As TextRange
    Dim oTmpRng As TextRange

    Set oSld = oPresen.Slides(1)    '修正

    For Each oShp In oSld.Shapes
        Set oTxtRng = oShp.TextFrame.TextRange
        Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
            Replacewhat:=sTo)
        Do While Not oTmpRng Is Nothing
            Set oTxtRng = oTxtRng.Characters(oTmpRng.Start + oTmpRng.Length, _
                oTxtRng.Length)
            Set oTmpRng = oTxtRng.Replace(FindWhat:=sFrom, _
                Replacewhat:=sTo)
        Loop
    Next oShp

End Sub

http://www.google.co.jp (ダミー)

id:clinejp

ありがとうございます。

C:\プレゼン資料\Original.ppt

にダミーデータを作っているのですが、下記のところでエラーが出ます。

何か考えられる原因はありますでしょうか。

oPresen.SaveAs CurDir & "\" & sNewPPT '修正(フォルダを記載しないとなぜかC:\Windows\Win32にできる)

エラーの内容は

「PresentationSaveAs:無効な要求です。無効なファイル名です」

となります。

コメントいただけると幸いです。

2008/01/18 12:59:50
  • id:clinejp
    すみません。
    エクセルファイルが正しいフォルダに入っていませんでした。

    現在正確にデータが反映されているのを確認しました。

    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません