エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方


excel,vba,shapes,addpicture,object,eyecatch

皆様こんにちは、ノグチです。

エクセルVBAで画像を操作しちゃおう!ということで、前回記事ではその第一歩として、Shapeオブジェクトとは?とShapeオブジェクトで操作できるオートシェイプやグラフなどをご紹介しました。

エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩
エクセルVBAで、オートシェイプや画像などを操作するための第一歩として、Shapeオブジェクトのご紹介をしています。Shapeオブジェクトを使えば、画像をシートに追加したり、移動、コピー、削除などの操作ができるようになりますよ。

今回は、ShapesコレクションのAddPictureメソッドを使って、画像ファイルをエクセルに張り付ける方法をご紹介します!

スポンサーリンク

Shapes コレクションとは

「Shapesコレクション?『s』がついているけど、shapeオブジェクトと何が違うの?」と思われた方、鋭い。

Shapesコレクションはシート上にあるShapeオブジェクト全てを指すものです。

それに対して、Shapeオブジェクトはシート上にあるオブジェクトのひとつ、単体を指すものです。

sがあるかないかの違いなのですが、役割や使えるメソッドが違いますので、注意が必要です。

シート上のShapesコレクションは、WorksheetオブジェクトのShapesプロパティで取得することができます。

Worksheetオブジェクト.Shapes

AddPictureメソッドとは

さて、画像ファイルをエクセルに追加するには、ShapesコレクションのAddPictureメソッドを使います。

このメソッドは、画像をエクセルに追加するためのメソッドです。

AddPictureメソッドの記述方法はこちら。

Shapesコレクション.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メソッドで画像を表示する

では、実際にこのメソッドを使って、エクセルに画像を表示してみましょう。エクセル,vba,shapes,請求書,画像

請求書の右上にある日付の下に、 会社ロゴを張り付けてみます。

会社ロゴとして使う画像ファイルは、請求書と同じフォルダに格納しています。

エクセル,vba,shapes,請求書,画像,ロゴ

請求書にロゴを表示するためのコードがこちら。

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

このコードを実行してみると…

この通り、画像ファイルが読み込まれて請求書にロゴが表示されました!

エクセル,vba,shapes,請求書,画像,ロゴ,貼付

 

まとめ

今回は、AddPictureメソッドで画像ファイルをエクセル上に張り付ける方法をご紹介しました。

手動の場合、画像の追加は簡単なんですが、サイズや場所の調整が結構面倒なんですよね。

1回こっきりのエクセルツールならまだしも、何度も使うような帳票などで毎回画像の調整なんてやっていられません。

そんな時には今回ご紹介したAddメソッドを使って、マクロに任せてしまいましょう!

次回は、今回ご紹介したAddPictureメソッドのLinkToFileパラメータの指定値によって、画像にリンクを張る方法をご紹介します。

【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法
エクセルVBA ShapesコレクションのAddPictureメソッドのパラメータ、LinkToFileに指定する値によって、エクセルに画像が表示される動作がどう変わるのか?をご消化しています。エクセルの使用用途や、エクセルに表示したい画像が変わることがあるかどうかでパラメータの指定値を使い分けましょう。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAで図形を操作するShapeオブジェクトの使い方

画像、オートシェイプ、グラフ、テキストボックス、ワードアート、ボタン…エクセルでは様々なものをシートに配置できますが、これらのアイテムは全てShapeオブジェクトです。これら、Shapeオブジェクトの挿入や配置など、自在に操作する方法をお伝えしていきます。
  1. エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩
  2. エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
  3. 【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法
  4. エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方

コメント

  1. うよつ より:

    はじめまして、とてもわかり易い説明で大変助かっています。
    重箱のすみ的指摘で心苦しいのですが、
    AddPictureメソッドのLinkToFileのパラメータのTrueとFalseの説明が逆になっていないでしょうか?
    ご確認よろしくお願いいたします。

    • ノグチ より:

      うよつ様
      こんにちは、ご指摘ありがとうございます。
      本当ですね、TrueとFalseの説明が逆になっていました。
      大事なところを間違えてしまいまして、恐縮です…
      ご指摘いただいた記事を修正させて頂きました。

      これからも当ブログを宜しくお願い致します!

タイトルとURLをコピーしました