「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ファイルが、元のサイズのまま挿入されます。
Dim pos_left As Single, pos_top As Single
With ActiveWindow.RangeSelection
pos_left = .Left
pos_top = .Top
End With
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プロシージャにすれば、選択していたセルにサイズも合わせて画像を挿入できます。
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
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で選択セルに画像を挿入する