【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!

HOME > 即効テクニック > Excel VBA > > 画像ファイルを挿入する

画像ファイルを挿入する|Excel VBA

図形操作関連のテクニック

画像ファイルを挿入する

(Excel 2000/2002/2003/2007/2010/2013/2016)

既存の画像ファイルから図を作成します。

構文  Object.AddPicture(FileName, LinkToFile, SaveWithDocument, Left,
			Top, Width, Height)
設定項目内容
ObjectShapesコレクションオブジェクト [省略不可]
FileName挿入する画像ファイル名をパス付きで指定 [省略不可]
LinkToFileTrueで元のファイルとのリンクを設定、Falseで独立した画像 [省略不可]
SaveWithDocumentTrueではExcelファイルとともに保存、Falseではリンク情報だけを保存 [省略不可]
Left挿入する画像の左端位置を指定 [省略不可]
Top挿入する画像の上端位置を指定 [省略不可]
Width挿入する画像の幅を指定 [省略不可]
Height挿入する画像の高さを指定 [省略不可]

■AddPictureメソッドで画像を貼りつける

次のサンプル1は画像をリンク貼り付けします。

●サンプル1●

Sub AddPictureSampLinkPaste()
    Dim myFileName As String
    Dim myShape As Shape
    
    myFileName = ActiveWorkbook.Path & "\mogtan.gif"
    
    '--(1) 選択位置に画像ファイルを挿入し、変数myShapeに格納
    Set myShape = ActiveSheet.Shapes.AddPicture( _
          Filename:=myFileName, _
          LinkToFile:=True, _
          SaveWithDocument:=False, _
          Left:=Selection.Left, _
          Top:=Selection.Top, _
          Width:=0, _
          Height:=0)
          
    '--(2) 挿入した画像に対して元画像と同じ高さ・幅にする
    With myShape
        .ScaleHeight 1, msoTrue
        .ScaleWidth 1, msoTrue
    End With
End Sub

(1)で画像ファイルを挿入しています。
引数LinkToFileにTrue、SaveWithDocumentにFalseを指定しているため、画像へのリンク情報だけがExcelファイルに保存されます。
ファイルサイズを大きくしたくない場合は、このように指定してください。

画像をリンク貼り付けした場合、元の画像ファイルを参照できない環境下で画像を挿入したファイルを開くと、画像はアイコンで表示されてしまいます。
画像をExcelファイルとともに保存したい場合は、引数LinkToFileにFalseを設定してください。
その場合、引数SaveWithDocumentはTrueにする必要があります。

●ポイント●

引数Width/Heightは画像の大きさを指定しますが、元の画像ファイルの大きさをポイント単位で計測してからコーディングする、ということは効率的ではありません。
これらの引数は省略できないので、いったん適当な値(ここでは0ポイント)で画像を作成した後に、(2)のようにScaleHeight/ScaleWidthメソッドで、元画像ファイルの大きさを復元させるのがよいでしょう。

■Pictures.Insertメソッドで画像を貼りつける
Excel97以降は隠しオブジェクトとなっているPictureオブジェクトのコレクションに対してInsertメソッドを使用すれば、サンプル2のような記述で同様のことができます。

●サンプル2●

Sub AddPictureSamp2()
    Dim myFileName As String
    
    myFileName = ActiveWorkbook.Path & "\mogtan.gif"
    
    '--(1) 選択位置に画像を挿入
    ActiveSheet.Pictures.Insert Filename:=myFileName
End Sub

●注意1●

Excel 2007では画像の挿入位置が他のバージョンと異なります。
Excel 2007で選択セルを左上端として画像を挿入するには、サンプル2の(1)のコードを下記のようにしてください。

With ActiveSheet.Pictures.Insert(Filename:=myFileName)
        .Top = ActiveCell.Top
        .Left = ActiveCell.Left
End With

●注意2●

Pictures.Insertメソッドを使った方法では、画像のリンク情報だけを保存する、または画像と一緒に保存するといった指定はできません。
さらに、Excel 2007までは画像情報と一緒に保存されていたのに対し、Excel 2010以降ではリンク貼り付けに仕様が変わるなど、Excelのバージョンによって画像の保存方法が異なります。
画像の保存場所やファイルサイズなど、ケースに応じて使い分けてください。
サンプル2の(1)のコードを下記のようにすると、Excel 2010以降で画像のリンク切れを回避することができます。

With ActiveSheet.Pictures.Insert(Filename:=myFileName)
    .CopyPicture    'クリップボードにコピー
    .Delete         '画像をいったん削除
End With
ActiveSheet.Paste   '画像を貼り付け

●ポイント●

Microsoft Officeで用意されているクリップアートも、1つ1つは独立した画像ファイル(WMFファイル)です。クリップアートを文書に挿入する際にも、これらのメソッドを用意します。