• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロでサイズを指定して画像を一括貼り付けしたいです。)

エクセルマクロで画像を一括貼り付けする方法

このQ&Aのポイント
  • エクセルマクロを使用して画像を一括貼り付けする方法を教えてください。
  • 前任者が作成したマクロで画像のサイズを指定する方法がわかりません。初心者のため、コードを理解できません。
  • 複数の画像を選択し、指定したセルに一括で挿入する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

ついでに。 Sub 複数画像の挿入() の動作にちょっと興味を惹かれましたので 習作してみました。 期待動作が違っていたら、こちらは捨て置いてください。 Sub try()   Dim a  As Range   Dim cc As Range   Dim W  As Single   Dim H  As Single   Dim mx As Long   Dim fi As Long   Dim i  As Long   Dim pkfile   On Error GoTo extLine   With Application     Set a = .InputBox("画像挿入するセル選択" & vbLf & _              "複数選択可", _              "複数画像の一括挿入(セル選択)", _              Selection.Address, _              Type:=8)     pkfile = .GetOpenFilename("すべての図" & _              "(*.emf;*.wmf;*.jpg;*.jpeg;*.jfif;" & _              "*.jpe;*.png;*.bmp;*.gif)," & _              "*.emf;*.wmf;*.jpg;*.jpeg;*.jfif;" & _              "*.jpe;*.png;*.bmp;*.gif", 2, _              "挿入する図の選択(複数選択可)", , True)     If Not IsArray(pkfile) Then       MsgBox "ファイルが指定されていません", , _           "複数画像の一括挿入"       GoTo extLine     End If     W = .InputBox("ヨコ", Type:=1)     H = .InputBox("タテ", Type:=1)     .ScreenUpdating = False   End With   mx = UBound(pkfile)   fi = 1   For Each cc In a     If cc.Address = cc.MergeArea.Item(1).Address Then       Call picIns(cc, pkfile(fi), W, H)       fi = fi + 1       If fi > mx Then         Set cc = Nothing         Exit For       End If     End If   Next   For i = fi To mx     Set a = a(a.Rows.Count, 1).Offset(1)     Call picIns(a, pkfile(i), W, H)   Next extLine:   Set a = Nothing   Application.ScreenUpdating = False   With err()     If .Number <> 0 Then MsgBox .Number & ":" & .Description   End With End Sub Sub picIns(ByVal r As Range, _       ByVal s As String, _       ByVal W As Single, _       ByVal H As Single)   With ActiveSheet.Pictures.Insert(s).ShapeRange     If (W > 0) And (H > 0) Then       .LockAspectRatio = msoFalse       .Width = W       .Height = H     ElseIf W > 0 Then       .Width = W     ElseIf H > 0 Then       .Height = H     End If     .Left = r.Left     .Top = r.Top   End With End Sub

sakaharu3
質問者

お礼

ありがとうございました。 思い通りの動作になりました。感謝します。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

挿入する複数の画像全て同じサイズにしたい、という解釈で良いですか? その前提で話をすすめます。 ご提示のマクロで望みの動作ができているなら、 サイズ指定マクロを作成して、その中で Sub 複数画像の挿入()を呼び出し、 最後にサイズ変更すれば良いです。 Sub macro()   Dim W As Single 'ヨコ   Dim H As Single 'タテ   Dim mn As Long  '挿入前の枚数   Dim i As Long   W = Application.InputBox("写真サイズのヨコは?", Type:=1)   H = Application.InputBox("写真サイズのタテは?", Type:=1)      '挿入前の枚数を記憶しておいてSub 複数画像の挿入を呼び出す   mn = ActiveSheet.Pictures.Count   Call 複数画像の挿入   With ActiveSheet.Pictures     '挿入なしはExit Sub     If .Count = mn Then Exit Sub     For i = mn + 1 To .Count       .Item(i).Select False     Next   End With   '挿入写真のみ選択してサイズ変更   With Selection.ShapeRange     'W,Hとも指定した場合は縦横比変更して指定サイズに。     If (W > 0) And (H > 0) Then       .LockAspectRatio = msoFalse       .Width = W       .Height = H     'Wのみ指定は縦横比を保持してWのみ変更     ElseIf W > 0 Then       .Width = W     'Hのみ指定は縦横比を保持してHのみ変更     ElseIf H > 0 Then       .Height = H     'どちらも指定しなければサイズ変更しない。     Else     End If   End With   ActiveCell.Activate End Sub こんな感じです。 上記はApplication.InputBoxを使ってユーザーにサイズを入力してもらう例ですが、 固定値でも構わない場合は、InputBoxを使わず直接Width,Heightを指定してください。 If (W > 0) And (H > 0) Then...等の条件分岐も必要なくなります。

関連するQ&A