- ベストアンサー
マクロでセルに入れたファイル名の画像を隣のセルに読み込む
- マクロを使用して、セル内のファイル名に対応する画像を隣のセルに読み込みたいという要望があります。しかし、実装がうまくいかずに困っています。
- 順位に基づいてセルに入力されたファイル名と一致する画像を隣のセルに表示したいという要望があります。また、一致しない場合は「No Image」と表示したいとのことです。
- 問題点として、実装時に「名」のセルの値を読み込むため、エラーが生じていると報告されています。また、画像のサイズもうまく調整できないという課題があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
倍率の変更もですが、それより 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
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
>No Imageの画像には非対応な感じでしたので >No Image画像にも同様、枠内に収めたいのですが。 ...はて?解りません。 他のjpgファイルはokなのに『No Imageの画像』がNGなのですね。 ファイルの問題じゃないですか? 他のファイルで試したり、サイズ変更して作り直したりしてみれば良いんじゃないでしょうか。 後は、貴方の方で色々と工夫する事で対応できるのではないかと思います。 では、この辺で。がんばってください。
お礼
end-uさん 「No Image」の方の画像サイズを変更したら直りました。 ご指摘ありがとうございます。 これで理想としていたことが完成しました。本当にありがとうございました。
- end-u
- ベストアンサー率79% (496/625)
とりあえず、最低限の修正なら 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
お礼
end-uさん イメージ通りのものができました。ご回答ありがとうございます。 どこがどう反映されているか、なんとなく分かったような気がします。 ただ、C2に画像が入った場合に枠線の上に重なるように画像が貼り付けられてしまうので縦横比固定の箇所で倍率の変更が出きればと思うのですが・・・ そこだけ何か解決案があればお聞きしたいです。
お礼
end-uさん おぉ!まさにこれを求めていました。ありがとうございます。 欲を言うと・・・。No Imageの画像には非対応な感じでしたので No Image画像にも同様、枠内に収めたいのですが。マクロ文を追加 しないとダメでしょうか?それとももともとの画像サイズが大きいとか ですかね??