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

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

「vba 選択したセルに画像を挿入 .AddPicture メソッド」
という検索キーワードでアクセスがありました。

Excel VBAの、Shapes.AddPictureメソッドを使って、

事前に選択しておいたセルに画像を挿入するには、どのようなコードを書けばいいのか調べていた方による検索です。

拙著『理解するExcel VBA/図形操作の基本』の、「5-4. AddPictureで画像を挿入する」で、以下のようなコードをご紹介しています。

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

このコードを応用すれば、選択されているセルに画像を挿入することもできます。

選択セルの左上を基準に画像を元サイズのまま挿入するサンプルマクロ

Cドライブのtempフォルダーにsample.jpgファイルを用意しておいてから、以下のExcelマクロを実行すると、選択セルの左上を基準にC:\temp\sample.jpgファイルが、元のサイズのまま挿入されます。

Sub 選択されているセルの左上を基準に画像を挿入する()
 Dim pos_left As Single, pos_top As Single

 With ActiveWindow.RangeSelection
  pos_left = .Left
  pos_top = .Top
 End With

 ActiveSheet.Shapes.AddPicture _
   Filename:="C:\temp\sample.jpg", _
   LinkToFile:=msoFalse, _
   SaveWithDocument:=msoTrue, _
   Left:=pos_left, _
   Top:=pos_top, _
   Width:=-1, _
   Height:=-1
End Sub

WindowオブジェクトのRangeSelectionプロパティで取得できる、選択セルの左上の位置を、変数pos_leftとpos_topに代入しておいて、

With ActiveWindow.RangeSelection
 pos_left = .Left
 pos_top = .Top

Shapes.AddPictureメソッドの引数LeftとTopに、pos_leftとpos_topをそれぞれ指定しています。

  Left:=pos_left, _
  Top:=pos_top, _

選択セルにサイズも合わせて画像を挿入するサンプルマクロ

以下のようなSubプロシージャにすれば、選択していたセルにサイズも合わせて画像を挿入できます。

Sub 選択されているセルにサイズも合わせて画像を挿入する()
 Dim pos_left As Single, pos_top As Single
 Dim sz_width As Single, sz_height As Single

 With ActiveWindow.RangeSelection
  pos_left = .Left
  pos_top = .Top
  sz_width = .Width
  sz_height = .Height
 End With

 ActiveSheet.Shapes.AddPicture _
   Filename:="C:\temp\sample.jpg", _
   LinkToFile:=msoFalse, _
   SaveWithDocument:=msoTrue, _
   Left:=pos_left, _
   Top:=pos_top, _
   Width:=sz_width, _
   Height:=sz_height
End Sub

先ほどのマクロにサイズを合わせる処理を追加しています。
選択セルの幅と高さを、変数sz_widthとsz_heightに代入しておいて、

With ActiveWindow.RangeSelection
 pos_left = .Left
 pos_top = .Top
 sz_width = .Width
 sz_height = .Height

Shapes.AddPictureメソッドの引数WidthとHeightに、sz_widthとsz_heightをそれぞれ指定しています。

  Left:=pos_left, _
  Top:=pos_top, _
  Width:=sz_width, _
  Height:=sz_height
[スポンサードリンク]

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

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

検索


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