2016
11
14

[VBA]ExcelグラフをPowerPointへ任意の位置・大きさで貼り付ける

Excelで作った複数のグラフや表を、ひとつずつ貼付先のPowerPointのシートの位置・貼付ける大きさを指定しておいてから、コピペするコードです。


はじめに

本記事は、こちらの派生記事です。

前書いたやつは、Excel側のオブジェクトと貼り付け先PPTのスライド番号を指定して、位置と大きさは一定でした。

でも、「このグラフは1番めのスライドの左上へ大きめに」「こっちの表を同じスライドの右下へ小さめに」「このグラフは2番めのスライドにドンと大きく」…、みたいな感じでひとつずつ位置や大きさを細かく指定して貼り付けたいというご要望がありました。言われてみればそういう使い方のほうが汎用的ですよね!

というわけで作ったコードを汎用的にしてまとめました。

仕様

161114-1 161114-2

Excelにあるグラフとか表を(グラフ名の調べ方は前述記事にありますので、間違えずに指定してください)、

161114-3 161114-4

このようにPPTの好きな場所へ好きな大きさで貼り付けます。貼り付け先のPPTは、指定されているスライドがすべて存在していて、既に開いているのが条件です。

大きさについては、縦横比固定にしてあるので、横幅だけ指定すれば縦幅はそれに連動して自動で決まる、という感じです。

前回はそれぞれの要素を配列を使って指定したのですが、ここ最近クラスモジュールがわかるようになってきて、これもクラスを使ったほうが断然やりやすいじゃん! と思って、効率的なコードを目指してやってみました。

こまけぇことはどうでもいいんだよ! という人は一番下のコードだけみてくださいw

方法1

最初に考えた形。

Class1

Publicで宣言してかんたんに使っちゃいます。

Module1

動作はするけど、長すぎ。ひとつのオブジェクトにこんなに行数を使ってられっか!!

方法2

Class1

プロパティをセットするサブルーチンをクラスに書いちゃう。

Module1

セットの記述がだいぶ短くなりました。モジュールを超えて使うのでコレクションの宣言はPublicに。この方式なら持たせたいプロパティが増えても行数が増えないですね。

でも、1行で! プロパティのセットは1行で書きたい!! ((└(:3」┌)┘))

方法3

どうしてもプロパティセットを1行にしたかった結果。

Class1

Module1

インスタンスの生成とプロパティをセットするサブルーチンを、標準モジュールのほうに書きました。これだとメインのコードで要素のセットが1行で済むので、コピペするオブジェクトがたくさんあっても書きやすいと思いました。

最終コード

というわけで、3番めの方法でPPTへのコピペまで含めたコードがこちら。

Class1

Module1

コピペしたいオブジェクトを増やしたい場合は16行目以降に追加してください。クラスを使って自分でプロパティを作っちゃえばコードが読みやすいし、配列のときと違って「全部で何個」というのを最初に指定しなくて良いので楽ですね。

追記:更に改コード

この記事を読んで、thomさんがこんな記事を書いてくださいました。

・・・

・・・

神 か ! ! !

かかか神が降臨なさったー!Σ(゚д゚lll) なんていうか、うっとりしてしまう綺麗なコードですね…(*´ω`*) そんなthom神のお導きにより、スマートになったコードがこちら。

Class1

クラスでFounctionを使って自身のインスタンスを返すとか…。。私には到底思いつきませんでしたヽ(゜´Д`)ノ゜。

Module1

どうですかこのスマートなコード!!(興奮)

コピペしたいオブジェクトを増やしたい場合は15行目以降に追加です。もうthom神には感謝してもし足りません。ありがとうございます!!!

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 618
  • RSSを登録

公開日:2016/11/14
更新日:2016/11/16


コメントを残す




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


back to top