PowerPointVBAで複数の表や図形に一括で画像を配置する

PowerPointVBAで複数の表や図形に一括で画像を配置する

PowerPointの図形に対して画像を配置するには、というご相談をいただきまして、興味があったので調べてみました。このブログを始めた頃はExcelVBAしかさわったことがなかったのですが、Accessにも手を広げ、書籍を書くのに勉強を重ねたこともあり、VBAへの知見もだいぶ広がりましたので、今ならPowerPointVBAも書けるのでは!? と思ってチャレンジした次第です。


仕様

スライドの準備

このようなスライドがあるとします。スライドにはそれぞれ図形(表含む)が複数個配置してあります。VBAで使う図形の名前は、「ホーム」→「選択」→「オブジェクトの選択と表示」ウィンドウで設定できるので、対象の図形を「shape〇」という名前にしておきます。「shape」という文字は任意で、数字部分を見て1から順番に画像を配置していきます。数値が途切れると途中終了してしまうので、途切れない連番を付けてください。

複数スライド対応のため2枚目も用意。こんな感じ。

画像の準備

挿入する画像はこんな感じだとします。「pic[スライド番号]-[画像番号]」です。「pic」という文字は任意です。スライド1枚目用、2枚目用にそれぞれ8枚ずつわかりやすいように番号を入れて用意しました。

画像は、対象のPowerPointファイルと同じフォルダに「img」というフォルダを作ってそこに入れています。このあたりは後述のコードでお好きにカスタマイズしてください。

ぱくたそさんの画像ガチャでサンプル画像作らせてもらいました。いつもありがとうございます!

実行後

後述のコードを実行するとこのような結果になります。「shape〇」という順番で、画像を連番で配置していきます。対象が表だった場合は、1列埋めてから次の行へ移ります。画像は「pic1-8.jpg」まで用意してありましたが、画像を配置する対象の場所が7個しかなかったので、8個目は実行されません。

2枚目。今度のは配置する場所は余っていますが、「pic2-9.jpg」が存在しないのでこちらも入りません。

補足

調べてみた感じ、PowerPointでは画像の配置といえばこちらのAddPictureメソッドがセオリーな感じがしたのですが、これは画像を配置するShapeをその都度追加作成するもので、今回は既存のShapeに画像を設定したいとのことだったのでこちらは使いませんでした。

で、既存の表や図形に画像を挿入するには、とやってみたところ、図形の中に画像は、入らないっぽい…? 挿入というより、画像右クリック→「塗りつぶし」→「図」の手順でやるやつ、これアレだ、背景画像だ!

というわけでどうも背景画像の設定という感じのコードになってしまったので、元々の図形の大きさを画像の比率に合わせてあげる必要があるかもしれません。

コード

メインのプロシージャは「sample」なので、これを実行してください。「setShape」と「hasImg」は連番の数の図形もしくは画像が存在するかチェックしている関数です。

コメントいっぱい入れておいたのでお好きに読み解いてカスタマイズしてお使いください!

追記

すみません公開してから気づいたのですが、コレ画像が多いと、画像のファイル名を一個一個変更するのが超めんどくさいな…! って思ってしまいました。なので、以下のようにimgフォルダの下にスライド番号のフォルダを作って、その中に入ってる画像ならファイル名不問にしました。拡張子も複数指定できます。

img
├ 1 – 〇〇.jpg, 〇〇.jpg, 〇〇.png…
├ 2 – 〇〇.jpg, 〇〇.jpg, 〇〇.png…
└ 3 – 〇〇.jpg, 〇〇.jpg, 〇〇.png…

フォルダ内の画像ファイルを名前順に取得して貼り付けるコードが以下です。

画像のファイル名なんでもいいのでこっちのほうが楽かもしれません!

公開日:2020/04/25

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)