- ベストアンサー
エクセルマクロで画像を一括貼り付けする方法
- エクセルマクロを使用して画像を一括貼り付けする方法を教えてください。
- 前任者が作成したマクロで画像のサイズを指定する方法がわかりません。初心者のため、コードを理解できません。
- 複数の画像を選択し、指定したセルに一括で挿入する方法を教えてください。
- みんなの回答 (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
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
挿入する複数の画像全て同じサイズにしたい、という解釈で良いですか? その前提で話をすすめます。 ご提示のマクロで望みの動作ができているなら、 サイズ指定マクロを作成して、その中で 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...等の条件分岐も必要なくなります。
お礼
ありがとうございました。 思い通りの動作になりました。感謝します。