Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Excel VBAで画像を挿入する-Shapes.AddPictureメソッド

Excel VBAで画像を挿入する-Shapes.AddPictureメソッド

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2101 ビルド13628.20448 Microsoft Store)

Excel.Shapes.AddPicture

「vba 画像挿入」
という検索キーワードでアクセスがありました。

このキーワードだけではどのアプリケーションについてかわかりませんが、アクティブなワークシートに画像を挿入するExcel VBAのサンプルをご紹介します。

画像を挿入する基本のサンプル

Cドライブのtempフォルダーにsample.jpgが存在している状態で、以下のSubプロシージャを実行してください。

Sub アクティブシートに画像を挿入する()
 ActiveSheet.Shapes.AddPicture _
   Filename:="C:\temp\sample.jpg", _
   LinkToFile:=msoFalse, _
   SaveWithDocument:=msoTrue, _
   Left:=0, _
   Top:=0, _
   Width:=-1, _
   Height:=-1
End Sub

アクティブシートの左上を基準に、C:\temp\sample.jpgが、元のサイズで挿入されます。

Shapes.AddPictureメソッドで画像挿入できる

Shapesコレクションに用意されているAddPictureメソッドを使えば、

Excel.Shapes.AddPictrue

画像の挿入ができます。

Excel VBAのShapes.AddPictureメソッドには、以下のような7つの引数を指定しなければなりません。

  Filename:画像ファイル名
  LinkToFile:画像ファイルとリンクした状態で挿入する否か
  SaveWithDocument:画像をブックに埋め込んで挿入するか否か
  Left:左端の位置
  Top:上端の位置
  Width:幅
  Height:高さ

上記のSubプロシージャでは、画像ファイルとリンクしない状態で、ブックに埋め込む形で挿入しています。

LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _

左端と上端は、アクティブシートの左上を指定しています。

Left:=0, _
Top:=0, _

Widht・Heightに「-1」を指定することで、元の画像サイズのままで挿入しています。

Width:=-1, _
Height:=-1

画像を挿入してサイズを変更するサンプル

画像を挿入してから、画像の縦横比を保持したまま、大きさを変更するなら、以下のようなコードです。

Sub アクティブシートに画像を挿入してサイズを変更する()
 Dim shp As Shape
 Set shp = ActiveSheet.Shapes.AddPicture( _
   Filename:="C:\temp\sample.jpg", _
   LinkToFile:=msoFalse, _
   SaveWithDocument:=msoTrue, _
   Left:=0, _
   Top:=0, _
   Width:=-1, _
   Height:=-1)

 shp.LockAspectRatio = msoTrue
 shp.Width = 300
End Sub

一旦、元のサイズのまま画像を挿入しておいて、あとからサイズを変更しています。

Shapes.AddPictureメソッドで、元のサイズのまま画像を挿入する部分は、基本的には同じですが、戻り値をオブジェクト変数shpに代入しているところが違います。

変数に代入するために、Shapes.AddPictureメソッドの引数をカッコで括っています。

Set shp = ActiveSheet.Shapes.AddPicture( _
  Filename:="C:\temp\sample.jpg", _
  LinkToFile:=msoFalse, _
  SaveWithDocument:=msoTrue, _
  Left:=0, _
  Top:=0, _
  Width:=-1, _
  Height:=-1)

挿入したらサイズの変更です。

なくても大丈夫そうではありますが念のため、Shape.LockAspectRatioプロパティに、

Excel.ShapeLockAspectRatio

msoTrueを指定することで、縦横比が変わらないようにしておいてから、

shp.LockAspectRatio = msoTrue

Shape.Widthプロパティを使って、

Excel.Shape.Width

画像の横幅を300に指定しています。

shp.Width = 300

最終更新日時:2022-12-28 13:17

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Excel VBAで画像を挿入する-Shapes.AddPictureメソッド

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.