• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロでセルに入れたファイル名の画像を隣のセルに読み込む)

マクロでセルに入れたファイル名の画像を隣のセルに読み込む

このQ&Aのポイント
  • マクロを使用して、セル内のファイル名に対応する画像を隣のセルに読み込みたいという要望があります。しかし、実装がうまくいかずに困っています。
  • 順位に基づいてセルに入力されたファイル名と一致する画像を隣のセルに表示したいという要望があります。また、一致しない場合は「No Image」と表示したいとのことです。
  • 問題点として、実装時に「名」のセルの値を読み込むため、エラーが生じていると報告されています。また、画像のサイズもうまく調整できないという課題があります。

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

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

倍率の変更もですが、それより Top 位置の調整が必要です。 Sub try_2()   Const n As Long = 2 'margin   Dim r As Range   Dim i As Long   Dim x As Double   Dim s As String      With ActiveSheet     For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6       Set r = .Cells(i, 3).MergeArea       s = "D:\画像\" & .Cells(i, 2).Value & ".jpg"       If Dir(s) = "" Then         s = "D:\画像\noimage.jpg"       Else         Dir Application.Path       End If       'r.Item(1).Value = s       With .Pictures.Insert(s).ShapeRange         .LockAspectRatio = msoTrue         x = Application.Min(r.Width / .Width, (r.Height - n) / .Height)         .Width = .Width * x         .Left = r.Left         .Top = r.Top + n / 2       End With     Next   End With      Set r = Nothing End Sub こんな感じで n の数値を変更して調整してください。 必要であればWidthとLeftも同じように。 中央に配置したい場合は以下に変更。 .Left = r.Left + (r.Width - .Width) / 2 .Top = r.Top + (r.Height - .Height) / 2

hiro7th
質問者

お礼

end-uさん おぉ!まさにこれを求めていました。ありがとうございます。 欲を言うと・・・。No Imageの画像には非対応な感じでしたので No Image画像にも同様、枠内に収めたいのですが。マクロ文を追加 しないとダメでしょうか?それとももともとの画像サイズが大きいとか ですかね??

その他の回答 (2)

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

>No Imageの画像には非対応な感じでしたので >No Image画像にも同様、枠内に収めたいのですが。 ...はて?解りません。 他のjpgファイルはokなのに『No Imageの画像』がNGなのですね。 ファイルの問題じゃないですか? 他のファイルで試したり、サイズ変更して作り直したりしてみれば良いんじゃないでしょうか。 後は、貴方の方で色々と工夫する事で対応できるのではないかと思います。 では、この辺で。がんばってください。

hiro7th
質問者

お礼

end-uさん 「No Image」の方の画像サイズを変更したら直りました。 ご指摘ありがとうございます。 これで理想としていたことが完成しました。本当にありがとうございました。

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

とりあえず、最低限の修正なら Private Sub CommandButton1_Click()   Dim i   As Long   Dim myPic As Object   Dim myCell As Range   For i = 2 To Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row Step 6     Set myCell = Range("B" & i)     Set myPic = ActiveSheet.Pictures.Insert("D:\画像\" & myCell.Value & ".JPG")     With myPic       .Left = Range("C" & i).Left       .Top = Range("C" & i).Top       .Width = Range("C" & i).MergeArea.Width       .Height = Range("C" & i).MergeArea.Height     End With     Set myPic = Nothing   Next i End Sub 縦横比固定の場合 Sub try()   Dim r As Range   Dim i As Long   Dim x As Double   Dim s As String      With ActiveSheet     For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6       Set r = .Cells(i, 3).MergeArea       s = "D:\画像\" & .Cells(i, 2).Value & ".jpg"       If Dir(s) = "" Then         s = "D:\画像\noimage.jpg"       Else         Dir Application.Path       End If       'r.Item(1).Value = s       With .Pictures.Insert(s).ShapeRange         .LockAspectRatio = msoTrue         x = Application.Min(r.Width / .Width, r.Height / .Height)         If x < 1 Then .Width = .Width * x         .Left = r.Left         .Top = r.Top       End With     Next   End With      Set r = Nothing End Sub

hiro7th
質問者

お礼

end-uさん イメージ通りのものができました。ご回答ありがとうございます。 どこがどう反映されているか、なんとなく分かったような気がします。 ただ、C2に画像が入った場合に枠線の上に重なるように画像が貼り付けられてしまうので縦横比固定の箇所で倍率の変更が出きればと思うのですが・・・ そこだけ何か解決案があればお聞きしたいです。

関連するQ&A

専門家に質問してみよう