画像貼付マクロ、エビデンス貼付けマクロ

あるフォルダに画像ファイルのみを入れる。

マクロ実行前に、貼付を始めるセルを選択しておく。

画像貼付シートの構成は、A列は数字列。B列に貼付けていく。C列は説明列。

1行目は見出し、2行目~11行目結合セル、12~21行目結合セル、22~31行目結合セル、のように10行ごとに結合してる。結合するセルの行数が変わったら、constを変える

Sub PastePictures()
        Application.ScreenUpdating = False
        Dim FSO As New FileSystemObject
        '結合行数(行方向にセル結合してなければ、ketugoGyosu=1でOK)
        Const ketugoGyosu As Long = 10
        
       With Application.FileDialog(msoFileDialogFolderPicker)
                .Title = "画像ファイルだけが入ったフォルダを選択"
                If .Show = True Then
                        Dim myFolderPath As String
                        myFolderPath = .SelectedItems(1)
                Else
                        Exit Sub
                End If
        End With
        
        Dim myFolder As Folder
        Set myFolder = FSO.GetFolder(myFolderPath)
        Dim myFiles As Files
        Set myFiles = myFolder.Files
        
        'マクロ実行前に選択されていたセルの行(i)と列(j)を把握
        Dim i  As Long: i = Selection.Row
        Dim j As Long: j = Selection.Column
        
        Dim myfile As File
        Dim mypic As Shape
        For Each myfile In myFiles
                '隠しファイルを読み込んで貼付失敗したのでその対策
                If myfile.Attributes And Hidden Then    '隠しファイルだったら
                        GoTo myfilenext                 '貼付はスキップして次のファイルへ
                End If
                
                Set mypic = ActiveSheet.Shapes.AddPicture( _
                                Filename:=myfile.Path, _
                                linktofile:=False, _
                                savewithdocument:=True, _
                                Left:=Cells(i, j).MergeArea.Left, _
                                top:=Cells(i, j).MergeArea.top, _
                                Width:=0, _
                                Height:=0)       'ピクセル表現面倒ゆえ、仮に,横0ピクセル縦0ピクセルで。
                                Cells(i, j + 1).Value = myfile.Name
                                
                '縦横比1倍に戻す(ここで1倍にすればピクセル調べずに貼付けられる)
                With mypic
                        .ScaleWidth 1, msoTrue
                        .ScaleHeight 1, msoTrue
                End With
        
                '画像をセルに収めるための倍率(縮小率)
                ' 例 画像が横500縦100、セルが横10縦10の大きさなら、横倍率0.02、縦倍率0.1
                Dim yokoBairitu As Double
                Dim tateBairitu As Double
                yokoBairitu = Cells(i, j).MergeArea.Width / mypic.Width
                tateBairitu = Cells(i, j).MergeArea.Height / mypic.Height
                
                '横と縦の倍率のうち、小さい方の倍率を使えば横も楯もセルに収まる
                If tateBairitu > yokoBairitu Then
                        mypic.Width = mypic.Width * yokoBairitu - 6       '左右余白合計6
                        mypic.Height = mypic.Height * yokoBairitu - 6     '上下余白合計6
                Else
                        mypic.Width = mypic.Width * tateBairitu - 6       '左右余白合計6
                        mypic.Height = mypic.Height * tateBairitu - 6     '上下余白合計6
                End If
        
                '画像を縦横の中央に配置(余白を上下左右均等に割り振る)
                '例 横長画像を正方形セルに入れるなら、左右余白は3ずつになる
                mypic.Left = mypic.Left + (Cells(i, j).MergeArea.Width - mypic.Width) / 2
                mypic.top = mypic.top + (Cells(i, j).MergeArea.Height - mypic.Height) / 2
                '貼付先を1つ下のセル(結合セル)に移動
                i = i + ketugoGyosu
myfilenext:                      '隠しファイルだったら処理スキップして次のファイルへ行く
        Next myfile
        
        Application.ScreenUpdating = False
End Sub