皆様こんにちは、ノグチです。
エクセルVBAで画像を操作しちゃおう!ということで、前回記事ではその第一歩として、Shapeオブジェクトとは?とShapeオブジェクトで操作できるオートシェイプやグラフなどをご紹介しました。
今回は、ShapesコレクションのAddPictureメソッドを使って、画像ファイルをエクセルに張り付ける方法をご紹介します!
Shapes コレクションとは
「Shapesコレクション?『s』がついているけど、shapeオブジェクトと何が違うの?」と思われた方、鋭い。
Shapesコレクションはシート上にあるShapeオブジェクト全てを指すものです。
それに対して、Shapeオブジェクトはシート上にあるオブジェクトのひとつ、単体を指すものです。
sがあるかないかの違いなのですが、役割や使えるメソッドが違いますので、注意が必要です。
シート上のShapesコレクションは、WorksheetオブジェクトのShapesプロパティで取得することができます。
AddPictureメソッドとは
さて、画像ファイルをエクセルに追加するには、ShapesコレクションのAddPictureメソッドを使います。
このメソッドは、画像をエクセルに追加するためのメソッドです。
AddPictureメソッドの記述方法はこちら。
そしてこのメソッドはパラメータが7つあり、すべて指定する必要があります。
それぞれ指定する内容がこちら。
パラメータ | 指定する内容 |
---|---|
Filename | エクセルに追加したい画像ファイルを指定します。 |
LinkToFile | True又はFalseで指定します。追加した画像ファイルにリンクを張ってエクセルを起動するたびに画像ファイルを読み込むか(True)、指定した画像をコピーしてエクセルに張り付けるか(False)を指定します。 |
SaveWithDocument | True又はFalseで指定します。画像ファイルをエクセルと一緒に保存するか(True)、画像ファイルへのリンク情報だけを保存するかを指定します。 |
Left | 画像ファイルの左上にあたる位置を、ポイントで指定します。 |
Top | 画像ファイルの上にあたる位置を、ポイントで指定します。 |
Width | 画像ファイルの幅を指定します。 |
Height | 画像ファイルの高さを指定します。 |
これらパラメータをすべて指定するには、こういう感じで記述します。
Worksheets(1).Shapes.AddPicture _ Filename:="C:\Users\user\Desktop\画像.png", _ LinkToFile:=True, _ SaveWithDocument:=True, _ Left:=330, _ Top:=40, _ Width:=100, _ Height:=80
AddPictureメソッドで画像を表示する
では、実際にこのメソッドを使って、エクセルに画像を表示してみましょう。
請求書の右上にある日付の下に、 会社ロゴを張り付けてみます。
会社ロゴとして使う画像ファイルは、請求書と同じフォルダに格納しています。
請求書にロゴを表示するためのコードがこちら。
Sub 画像追加() Dim shpPic As Shape Dim strPath As String strPath = "C:\Users\user\Desktop\請求書\ロゴ.png" Worksheets(1).Shapes.AddPicture _ Filename:=strPath, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=330, _ Top:=40, _ Width:=100, _ Height:=80 End Sub
このコードを実行してみると…
この通り、画像ファイルが読み込まれて請求書にロゴが表示されました!
まとめ
今回は、AddPictureメソッドで画像ファイルをエクセル上に張り付ける方法をご紹介しました。
手動の場合、画像の追加は簡単なんですが、サイズや場所の調整が結構面倒なんですよね。
1回こっきりのエクセルツールならまだしも、何度も使うような帳票などで毎回画像の調整なんてやっていられません。
そんな時には今回ご紹介したAddメソッドを使って、マクロに任せてしまいましょう!
次回は、今回ご紹介したAddPictureメソッドのLinkToFileパラメータの指定値によって、画像にリンクを張る方法をご紹介します。
それでは、最後までお読みいただきありがとうございました!
コメント
はじめまして、とてもわかり易い説明で大変助かっています。
重箱のすみ的指摘で心苦しいのですが、
AddPictureメソッドのLinkToFileのパラメータのTrueとFalseの説明が逆になっていないでしょうか?
ご確認よろしくお願いいたします。
うよつ様
こんにちは、ご指摘ありがとうございます。
本当ですね、TrueとFalseの説明が逆になっていました。
大事なところを間違えてしまいまして、恐縮です…
ご指摘いただいた記事を修正させて頂きました。
これからも当ブログを宜しくお願い致します!