シートに画像を挿入するモジュールのソースです。

Sub SP_8500GazPast(obj作成シート As Object, strGazouFullPath As String, strA1 As String, strName As String, sngWidth As Single)
'*************************************************************************************************
'@  エクセルシートに画像を貼り付ける
'* [INPUT]  obj作成シート as Object        '==対象のexcelシート
'*          strGazouFullPath AS STRING     '==画像ファイルのフルパス 例) d:\test\data.jpeg
'*          strA1 AS STRING                '==画像を貼り付けるセル  例) "H10"
'*          strName as STRING              '==貼り付けた画像につける名前  ""なら名前は付けない
'*          sngWidth as SINGLE             '==横幅    縦は自動計算し行高さを調整している  ここが0ならstrA1の巾に
'*************************************************************************************************
Dim objShape As Object
Dim sngTop As Single
Dim sngLEFT As Single
Dim sngHT As Single
Dim sngWD As Single
Dim sngSetWidth As Single
Dim sngHEIGHT As Single
Dim sngWIDT As Single
Dim sngW1 As Single
'
'***挿入
    obj作成シート.Activate
    sngTop = obj作成シート.Range(strA1).Top
    sngLEFT = obj作成シート.Range(strA1).Left
    Set objShape = obj作成シート.Shapes.AddPicture(FileName:=strGazouFullPath, LinkToFile:=False, SaveWithDocument:=True, Left:=sngLEFT, Top:=sngTop, Width:=0#, Height:=0#)
'
'***図形に名前を付ける
    If strName <> "" Then
       objShape.Name = strName
    End If
'
'***図の大きさ調整(元のサイズを知る)
    With objShape
        .ScaleHeight 1, True
        .ScaleWidth 1, True
    End With
    sngHT = objShape.Height
    sngWD = objShape.Width
'
'***横幅決定
    If sngWidth = 0 Then
       sngSetWidth = obj作成シート.Range(strA1).Width
    Else
       sngSetWidth = sngWidth
    End If
'
'***割合を計算(指定は横なので縦を計算する)
    sngHEIGHT = sngSetWidth * sngHT / sngWD
'
'***行高さは409以内
    If sngHEIGHT >= 400 Then
       sngHEIGHT = 400
    End If
'
'***縦が収まら無ければ行高さを調整
    sngW1 = obj作成シート.Range(strA1).Height
    If sngW1 < sngHEIGHT Then
       obj作成シート.Range(strA1).EntireRow.RowHeight = sngHEIGHT
    End If
'
'***割合を計算(指定は横なので縦を計算する)
    objShape.Height = sngHEIGHT
    objShape.Width = sngSetWidth
'
'***後始末
    Set objShape = Nothing
  
'***EXIT
    Exit Sub
End Sub



テスト用メイン
Sub TestMain()
'*****************************************************
'@ SP_8500GazPastのテスト用メイン
'*****************************************************
Dim strBookPath As String
Dim obj対象ブック As Object      '==ブックオブジェクト
Dim obj作成シート As Object      '==対象のexcelシート
Dim strGazouFullPath As String   '==画像ファイルのフルパス 例) d:\test\data.jpeg
Dim strA1 As String              '==画像を貼り付けるセル 例) "H10"
Dim strName As String            '==貼り付けた画像につける名前 ""なら名前は付けない
Dim sngWidth As Single           '==横幅    縦は自動計算し行高さを調整している ここが0ならstrA1の巾に
  
'
'***TEST用データブック
    strBookPath = ThisWorkbook.Sheets(1).Range("DataPath")
    If strBookPath = "" Then
       MSGBOX "TEST用データブックを指定して下さい"
       Exit Sub
    End If
'
'***TEST用画像
    strGazouFullPath = ThisWorkbook.Sheets(1).Range("DataPath2")
    If strGazouFullPath = "" Then
       MSGBOX "TEST用画像を指定して下さい"
       Exit Sub
    End If
'
'***TEST用ブックOPEN
    Set obj対象ブック = Workbooks.Open(FileName:=strBookPath)
    Set obj作成シート = obj対象ブック.worksheets(1)
'
'***CALL
    strA1 = "B2"                 '==画像を貼り付けるセル 例) "H10"
    strName = "画像の名前"       '==貼り付けた画像につける名前 ""なら名前は付けない
    sngWidth = 80                '==横幅    縦は自動計算し行高さを調整している ここが0ならstrA1の巾に
    Call SP_8500GazPast(obj作成シート, strGazouFullPath, strA1, strName, sngWidth)  '==エクセルシートに画像を貼り付ける
'
'***後始末
    Set obj作成シート = Nothing
    Set obj対象ブック = Nothing
'
'*** EXIT
    Exit Sub
  
End Sub