見出し画像

VBA|Excel|画像挿入|Pictures.Insert+縦横比固定+サイズ調整+セル位置へ配置(Top/Left)



基本構文

(実務テンプレ:画像を挿入してセル位置に合わせる)

○ 挿入:

Set pic = ActiveSheet.Pictures.Insert({画像フルパス})

○ 縦横比固定:

pic.ShapeRange.LockAspectRatio = msoTrue

○ サイズ調整:

pic.Height = {高さ}

(縦横比固定なら幅は自動追従)

○ 位置合わせ:

pic.Top = Cells(r, c).Top
pic.Left = Cells(r, c).Left

○ 解放:

Set pic = Nothing

(戻り値の型・性質)

○ Pictures.Insert:Picture(Excelの画像オブジェクト参照)  
○ ShapeRange.LockAspectRatio:/MsoTriState(msoTrue/msoFalse)  
○ Top/Left/Height:Single(ポイント単位の座標・サイズ)



サンプルコード

サンプル①:セルの位置に画像を置き、高さ110で縦横比固定 役割:ファイル名列の画像を挿入し、画像列のセル左上に配置する 理由:縦横比固定+高さ固定で見た目を揃え、Top/Leftでセル基準に整列する 注意:Pictures.Insert は ActiveSheet に入るので、対象シートを明示したい場合は objWS.Pictures.Insert に寄せる

Option Explicit
Sub InsertAndPlacePicture()
    Dim objWS As Worksheet: Set objWS = ActiveSheet
    Dim objPic As Picture

    Dim i As Long
    Dim lngBeforeFileNameCol As Long: lngBeforeFileNameCol = 2 '例:B列がファイル名
    Dim lngImageCol As Long:          lngImageCol = 5          '例:E列に画像を置く
    Dim strFolderPath As String:      strFolderPath = "C:\Temp\Images"

    i = 2 '例:2行目

    ' 挿入する画像をオブジェクトにセット
    Set objPic = objWS.Pictures.Insert(strFolderPath & "\" & objWS.Cells(i, lngBeforeFileNameCol).Value)

    ' 画像比率に合わせる(縦横比固定)
    objPic.ShapeRange.LockAspectRatio = msoTrue

    ' 画像の高さを設定(幅は比率に合わせて追従)
    objPic.Height = 110

    ' サイズ変更後、画像挿入位置(セル左上)へ移動
    objPic.Top = objWS.Cells(i, lngImageCol).Top
    objPic.Left = objWS.Cells(i, lngImageCol).Left

    ' 画像オブジェクト解放
    Set objPic = Nothing
End Sub

備考

・Pictures.Insert は 指定パスが存在しない と実行時エラーになりやすいので、実務では Dir(fullPath)<>"" で事前チェックするのが安全。
・画像のアンカーは「セルに貼り付く/貼り付かない」挙動が絡む。必要なら objPic.Placement = xlMoveAndSize などの指定を追加する(運用で選ぶ)。
・Top/Left はポイント座標なので、セルの Top/Left を使うと「セル左上ピッタリ」に揃えられる。
・LockAspectRatio は ShapeRange 側のプロパティ。Picture を Shape として扱う流れなので、この順(固定→サイズ→移動)が安定。

いいなと思ったら応援しよう!

Parusの寺小屋 技術メモや学習の整理として書いています。 もし内容が役に立ったり、続きを読みたいと思っていただけたら、 応援として受け取らせてもらえたら嬉しいです。