【VBA】ワークシートに画像を挿入する

エクセルVBAで使うコードの備忘録。VBAでワークシートに指定した画像ファイルを挿入するコード。画像の位置やサイズ、リンクとして挿入するかなどの設定について。

スポンサーリンク

AddPictureメソッド

ワークシートに画像を挿入するには、「Worksheet」オブジェクト下の「Shapes」オブジェクトの「AddPicture」メソッドを使用します。「AddPicture」メソッドの引数は挿入したい画像ファイルのパスをはじめとした以下のようなものになります。引数はすべて必須です。

AddPictureメソッド

変数名説明
FileName挿入したい画像ファイルのパス。
LinkToFile画像ファイルのリンクを挿入するかどうか。
リンクにするとサイズが軽くなるが、
画像ファイルが移動されたりすると表示されなくなる。
msoTrue: リンクのみ、msoFalse:リンクでない
SaveWithDocumentファイル保存時に画像を一緒に保存するかどうか。
リンクとして挿入している場合はMsoFalseを選択。
msoTrue: 画像を保存、msoFalse: 画像を保存しない
Left画像の挿入位置。
ワークシート左端からの位置をポイント単位で指定。
Top画像の挿入位置。
ワークシート上端からの位置をポイント単位で指定。
Width画像の幅をポイント単位で指定。
元のサイズを保持する場合は-1を指定。
Height画像の高さをポイント単位で指定。
元のサイズを保持する場合は-1を指定。

サンプルコード

下記のサンプルコードでは画像ファイルをもとのサイズのままリンクとして読み込んで表示するようにしています。変数「shpObj」は挿入された画像を表すオブジェクトなので、後々この画像を操作したくなった際にはこのオブジェクトにアクセスしてやればよいです。

ちなみに下記のサンプルでは画像挿入位置の指定については特に触れていませんが、全体位置を指定するよりもセルの位置を指定する方が何かと便利であったりします。セルの位置を取得する方法についてはこちらの最後の方で触れています。

なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

Public Sub AddPictureSample()
    
    '--- 読み込む画像ファイルのパス ---'
    Dim pictPath As String
    pictPath = "[ファイルパス]"
    
    '--- 読込先のワークシート ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("[シート名]")
    
    '--- 画像の挿入位置 ---'
    Dim posLeft As Long
    Dim posTop As Long
    posLeft = 0
    posTop = 0
    
    '--- 画像の挿入 ---'
    Dim shpObj As Object
    Set shpObj = ws.Shapes.AddPicture( _
        Filename:=pictPath, _
        LinkToFile:=msoTrue, _
        SaveWithDocument:=msoFalse, _
        Left:=posLeft, _
        Top:=posTop, _
        Width:=-1, _
        Height:=-1 _
        )
    
End Sub