- ベストアンサー
VBAで商品画像を自動で表示する方法
- VBAを使用してExcelで商品コードに対応する画像を自動で表示する方法について教えてください。
- 現在、マクロを作成しているのですが、プロシージャが大きいというエラーが発生しています。
- また、画像の貼り付けや位置調整についても改善の方法を教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#01です。先のマクロでは商品コードをDeleteしたときに画像が残ってしまいますね。以下に差し替えます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String Dim nmPic As String Dim res As Range Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _ LookIn:=xlValues, lookat:=xlWhole) If res Is Nothing Then Exit Sub Else On Error Resume Next nmPic = res.Offset(0, 1).Value '対応表のB列の値を格納 ActiveSheet.Shapes(nmPic).Delete If Target.Value <> "" Then ファイル = "C:\保存場所\" & Target.Value & ".jpg" Target.Offset(1, 1).Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.Name = nmPic With Selection.ShapeRange .LockAspectRatio = msoTrue .Top = ActiveCell.Top .Left = ActiveCell.Left .Height = 97 .Width = 52.5 .Rotation = 0# .IncrementLeft 1.5 .IncrementTop 1.5 End With End If End If End Sub
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
対応表というシートを作成し、A列に商品コードが入力されるセルアドレスを列記しておきます。B列はそのセルの右下セルに挿入する画像の名前です A列 B列 A4 画像1 A8 画像2 A12 画像3 ~中略~ U60 画像98 そうすれば以下のマクロだけで済むと思います。 商品コードが入力されたセルアドレスで対応表を検索し、合致するセルアドレスがあれば画像挿入の処理をするようにしています。 (テストはしていません。あしからず) なお「On Error Resume Next」を追加したのは商品コードに対応する画像がシートにないときエラーとなるのを防止するためです。 オリジナルのロジックでは「最初から画像1~画像98が全てシート上にある」ときはエラーになりませんが、空いている表示欄に商品コードを入力すると削除しようとする画像がないのでエラーになりそうです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String Dim res As Range If Target.Value = "" Then Exit Sub Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _ LookIn:=xlValues, lookat:=xlWhole) If res Is Nothing Then Exit Sub Else On Error Resume Next ActiveSheet.Shapes(res.Offset(0, 1).Value).Delete ファイル = "C:\保存場所\" & Target.Value & ".jpg" Target.Offset(1, 1).Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.Name = res.Offset(0, 1).Value With Selection.ShapeRange .LockAspectRatio = msoTrue .Top = ActiveCell.Top .Left = ActiveCell.Left .Height = 97 .Width = 52.5 .Rotation = 0# .IncrementLeft 1.5 .IncrementTop 1.5 End With End If End Sub
お礼
早々の回答ありがとうございました。 さっそく対応表を作り、コードをコピーしましたが下記部分でエラーがでました。 Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _ LookIn:=xlValues, lookat:=xlWhole) しかしながら、「.colomns(1)」を「.columns(1)」にする事で無事解決しました。 少ない説明で完璧な回答ありがとうございました。